并发中的可见性,原子性和有序性问题
程序员文章站
2023-10-21 20:52:31
并发一、并发的根源cpu、内存、I/O设备 三者的速度差异二、并发带来的问题2.1 缓存导致的可见性可见性:一个线程对共享变量的修改,另一个线程可以立马看到,称为“可见性”(你的修改我能看见)。2.2 线程切换带来的原子性问题把一个或者多个操作在cpu执行过程中不被中断的特性称为“原子性”(原子哦,不可切割)。非原子性操作:2.3 编译优化带来的有序性问题编译器为了优化性能,可能会调整指令顺序哦。public class Singleton { static Singleton...
并发带来的问题
一、并发的根源
cpu、内存、I/O设备 三者的速度差异
二、并发带来的问题
2.1 缓存导致的可见性
可见性:一个线程对共享变量的修改,另一个线程可以立马看到,称为“可见性”(你的修改我能看见)。
2.2 线程切换带来的原子性问题
把一个或者多个操作在cpu执行过程中不被中断的特性称为“原子性”(原子哦,不可切割)。
非原子性操作:
2.3 编译优化带来的有序性问题
编译器为了优化性能,可能会调整指令顺序哦。
public class Singleton {
static Singleton instance;
static Singleton getInstance(){
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
因重排序带来的异常执行
三、总结
并发固然高效,但带来的问题也需要重视哦。
本文地址:https://blog.csdn.net/cfy1024/article/details/107092566