Java线程安全有序性如何实现及分析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计631个文字,预计阅读时间需要3分钟。
有序性是指在软件开发中,我们通常按照从上到下的顺序编写程序指令,并希望CPU和编译器能按照我们预先编写的顺序执行。然而,为了提高性能和优化指令执行,CPU和编译器可能会根据实际情况调整执行顺序。
什么是有序性
在开发中,我们通常按照从上到下的顺序编写程序指令,并且希望cpu和编译器按照我们预先编写的顺序去执。但往往cpu和编译器为了提高性能、优化指令的执行顺序,会将我们编写好的程序指令进行重排序。
此时如果是在单线程状态下,无论是否进行了重排序都不会影响程序最终的结果
而有序性是指在多线程环境下就可能会由于程序指令重排序后导致最终结果与预期不符的情况
我们以单例模式中的双重检验锁为例
利用new关键字创建一个对象实际上是执行了三个操作
- 分配内存空间
- 在内存上(执行构造方法)初始化对象
- 将初始化后的对象提交给引用(对象引用指向分配好的内存空间地址)
但是当我们在运行程序时,编译器对程序进行重排序优化,经常会将2和3两个步骤进行调换。
本文共计631个文字,预计阅读时间需要3分钟。
有序性是指在软件开发中,我们通常按照从上到下的顺序编写程序指令,并希望CPU和编译器能按照我们预先编写的顺序执行。然而,为了提高性能和优化指令执行,CPU和编译器可能会根据实际情况调整执行顺序。
什么是有序性
在开发中,我们通常按照从上到下的顺序编写程序指令,并且希望cpu和编译器按照我们预先编写的顺序去执。但往往cpu和编译器为了提高性能、优化指令的执行顺序,会将我们编写好的程序指令进行重排序。
此时如果是在单线程状态下,无论是否进行了重排序都不会影响程序最终的结果
而有序性是指在多线程环境下就可能会由于程序指令重排序后导致最终结果与预期不符的情况
我们以单例模式中的双重检验锁为例
利用new关键字创建一个对象实际上是执行了三个操作
- 分配内存空间
- 在内存上(执行构造方法)初始化对象
- 将初始化后的对象提交给引用(对象引用指向分配好的内存空间地址)
但是当我们在运行程序时,编译器对程序进行重排序优化,经常会将2和3两个步骤进行调换。

