多线程的线程安全问题
1. 内存可见性
一个线程对共享变量值的修改,能够及时地被其他线程看到。
2. 竞态条件
竞态条件:当某个计算的正确性去居于多个线程交替执行的执行顺序,就会发生竟态条件。
解决线程安全方法
解决线程的方法就是,在一个线程对数据进行一系列操作期间,只允许当前线程访问数据。其他的线程被关在这段执行代码外等待,不得读写数据。
解决线程安全:
1. 避免数据同步访问
- 使用不可变对象,则一定是线程安全的。
- 不共享数据变量,只在单独线程中访问数据(例如使用ThreadLocal进行线程封闭).
2. 内存可见性
- 使用volatile解决内存可见性问题
3. 数据同步访问加锁:
- 使用synchronized关键字
- 使用Reentranctlock锁
posted on
浙公网安备 33010602011771号