前言
本章介绍线程安全问题
一、线程安全?
1.发生线程安全问题的条件
- 多线程并发
- 有共享资源
- 共享资源有修改行为
2.怎么解决线程安全问题
线程排队执行(不能并发):使用线程同步机制
二、异步编程模型
线程A和线程B各自执行各自的,A不影响B,B也不影响A互不干扰。异步编程模型就是多线程并发(优点:效率较高)
三、同步编程模型
线程A和线程B,在线程A执行的时候,必须等待线程B执行结束,或者线程B执行的时候,必须等待线程A的执行结束。线程与线程之间发生了等待关系(效率较低)。这样排队执行的方式就是同步机制。
四、线程安全是为了什么?
线程安全是为了保护变量的安全
1.Java中的三大变量
实例变量(存储在堆内存中)
静态变量(存储在方法区内存中)
局部变量(存储在栈内存中)
2.三大变量的安全
在三大变量中:
- 局部变量永远不会存在线程安全问题,因为局部变量不共享。
- 堆和方法区都是多线程共享的,所以可能会存在线程安全问题。
- 常量不存在线程安全问题,因为常量一旦赋值不可改变。
补充:如果使用局部变量建议使用StringBuilder(非线程安全,效率较高)