线程安全方法
1. 竞争与原子操作
2. 同步与锁
3. 可重入
4. 过度优化
方法解释
(1) 竞争与原子操作
多线程同时访问和修改同一个数据时,可能存在风险,数据不能保证我们得到的预期数据,解决的办法,我们可以采用原理类,比如JAVA 本身提供了很多的原子类,AtomicInteger ,AtomicLong 等常见的基本数据类型的原子包装类定义,实现数据安全。
(2) 同步与锁
多线程中我们定于的数据,使用Lock去保证数据操作的过程中只有一个线程进入,这个线程拿到锁后,其他线程都不能拿到该锁,进而保证数据的可靠性。
(3) 可重入
一个函数被重入,表示这个函数没有执行完成,但由于外部因素或内部因素,又一次进入该函数执行。例如单片机、处理器的中断会出现重入现象。
参考文章:https://blog.csdn.net/acs713/article/details/20034511
(4) 过度优化
即使使用了合理使用锁,也不一定保证了线程安全,因此需要进行代码的二次优化,使用volatile关键字试图阻止过度优化,它可以做两件事:第一,阻止编译器为了提高速度将一个变量缓存到寄存器而不写回;第二,阻止编译器调整操作volatile变量的指令顺序。
参考文章: