总结:线程安全问题的原因和解决方案
通过学习线程安全问题,我了解到了线程的安全是多么重要,接下来我就来总结一下一些常见的线程安全问题以及它们的解决方案.
1.造成线程安全的原因有多种:
1)线程的调度执行是随机的(抢占式执行)[根本原因].
2)多个线程同时修改同一个变量.
3)修改操作不是原子的
4)内存可见性
5)指令重排序
2.解决方案
对于3)修改操作不是原子的引起的线程安全问题:
加锁(synchronized):加锁可以把一段代码打包成一个整体,这就可达到"原子的"效果
对于4)内存可见性和5)指令重排序引起的线程安全问题:
volatile:被volatile修饰的变量可以避免编译器的优化,从而避免了因此引起的线程安全问题