什么时候出现线程安全,如何实现线程安全?
1.什么时候出现线程安全
多线程的环境下,多个线程共享某块内存空间,并且这块共享的内存空间涉及到数据的修改
2.如何实现线程安全
(1)多线程并发不安全的原因已经知道,那么针对这种情况,java中有两种解决思路:
- 给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用。
- 让线程也拥有资源,不用去共享进程中的资源。
(2)基于上面的两种思路,下面便是3种实施方案:
1. 多实例、或者是多副本(ThreadLocal),一个线程一个对象,对象内存不共享,实例变量内存不共享;
2. 使用锁机制 synchronize、lock方式:为资源加锁;
3. 使用 java.util.concurrent 下面的类库:有JDK提供的线程安全的集合类。
(3)尽量使用局部变量代替实例变量
总结:(前提是:多线程并发的环境下,数据有修改操作)
局部变量不可能存在线程安全问题
实例变量可能存在线程安全问题
静态变量一定存在线程安全问题
守护线程:
1.线程分类 用户线程,和守护线程[之前讲的所有进程都是用户线程]
2.什么是守护线程,守护线程的特点?
守护线程又被称后台线程,例如 GC机制(java中的自动垃圾回收机制)
特点: 当所有的用户线程结束之后,守护线程自动结束,另外守护线程通常是一个死循环