当前位置: 移动技术网 > IT编程>开发语言>Java > 并发1 - 可见性,原子性和有序性问题

并发1 - 可见性,原子性和有序性问题

2020年07月03日  | 移动技术网IT编程  | 我要评论

并发带来的问题

一、并发的根源

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网