线程安全性
线程安全定义:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的
一个对象是否线程安全的,取决于它是否能被多个线程访问;
无状态的对象一定是线程安全的;
JAVA同步机制
- synchronized
- volatile
- Explicit Lock显式锁(JUC--Lock)
- 原子变量
共享与可变
共享意味着变量可以由多个线程同时访问
可变意味着变量值在生命周期内可以发生变化
首先需要理解线程安全的两个方面:执行控制和内存可见
- 执行控制的目的是控制代码执行(顺序)及是否可以并发执行
- 内存可见(Memory Visibility)控制的是线程执行结果在内存中对其它线程的可见性
解决线程安全的主要手段
- 将对象设计为无状态对象
- 使用局部对象
- 并发访问资源时使用锁
线程同步会增加共享内存总线上的通信量,总线的带宽是有限的,并且所有的处理器都将共享这条总线
编写并发程序时,一种正确的编程方法是:首先使代码正确运行,然后再提高代码的速度;
【参考资料】