多线程系列总结
一、线程、多线程出现的背景
解决CPU、内存和IO三者间的速度差异,CPU利用率最大化。
二、多线程带来的问题
可见性
因为CPU缓存,一个线程对某个变量的修改,另一个线程不能立即看到
原子性
因为线程调度,一个线程还未执行完语言级的语句,就被让出CPU时间片,另一个线程在旧的数据上继续操作,等先前线程重新被调度执行后,继续那个线程的更新覆盖掉。
有序性
编译器优化CPU指令,在单线程中完全没问题,但是在多线程中,可能会导致其他线程读到中间态数据
三、怎么解决多线程带来的三个问题
1.解决可见性问题
volatile 6项Happens-Before规则
2.解决原子性问题
使用管程
3.解决有序性
还是volatile?防止指令重排
四、并发编程最佳实践-9个并发编程设计模式
网友评论