欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

并发中的可见性,原子性和有序性问题

程序员文章站 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