非原子性
原子性:过程在执行时一气呵成,不被打断的特性成为原子性。
在并发环境下,CPU会对各个进程或者线程(过程),进行调度。调度时,进程或者线程会被打断。因此并发编程存在非原子性问题。
不可见性
根据Java内存模型可知,各个线程运行时会将共享变量从主内存中加载到自己的工作内存(主内存),线程在执行过程中对变量的修改对于其他线程是不可见的。
无序性
高级语言编写的代码需要经过编译器编程成汇编语言,编译器为了提高执行效率而重新将机器指令重新排序,在个别特殊情况将会影响代码运行的结果。
并发问题总结
缓存导致的可见性问题,编译优化带来的有序性问题,线程切换带来的原子性问题,。其实缓存、线程、编译优化的目的和我们写并发程序的目的是相同的,都是提高程序安全性和性能。但是技术在解决一个问题的同时,必然会带来另外一个问题,所以在采用一项技术的同时,一定要清楚它带来的问题是什么,以及如何规避。

510

被折叠的 条评论
为什么被折叠?



