Java@深入理解Java虚拟机:高效并发之Java内存模型( 二 )
- 保证此变量对所有线程的可见性 , 但对于运算不是原子操作(当一条线程修改了一个变量的值 , 新值对于其他线程来说是可以立即得知的) 。
- 由于volatile变量只能保证可见性 , 在不符合规则的运算场景中 , 仍然需要枷锁来保证原子性
- 运算结果不依赖变量的当前值 , 或者能够保证只有单一的线程修改变量的值 。
- 变量不需要与其他的状态变量共同参与不变约束 。
- 禁止指令重排序优化 。
原子性、可见性与有序性
- 原子性:基本数据类型的访问、读写都是具备原子性的;大范围的原子性保证(synchronized)
- 可见性:当一个线程修改了共享变量的值时 , 其他线程能够立即得知这个修改 。 (synchronized、final)
- 有序性:volatile、synchronized两个关键字保证线程之间的有序性;volatile禁止了指令重排序 , synchronized则是一个变量在同一个时刻只允许一条线程对其进行了lock操作 。
- 程序次序规则:在一个线程内 , 按照控制流顺序 , 书写在前面的操作先行发生于书写在后面的操作 。
- 管程锁定规则:一个unlock操作先行生发于后面对同一个锁的lock操作 。
- volatile变量规则:对一个volatile变量的写操作先行发生于后面对这个变量的读操作 。
- 线程启动规则:Thread对象的start()方法先行发生于此线程的每一个动作 。
- 线程终止规则:线程中的所有操作都先行发生于对此线程的终止检查 , 通过Thread::join()方法是否结束、Thread::isAlive()的返回值等检测线程是否已经终止执行 。
- 对象终结规则:一个对象的初始化完成先行发生于它的finalize()方法的开发 。
推荐阅读
- 木星:地球没事吧?太阳系最强烈暴风雨出现,却被要求深入探测
- Java@23种java设计模式之:建造者模式、工厂方法模式、抽象工厂模式!
- IT之家▲《后浪》策划团队回应刷屏:并不会反对一些不同的理解
- Java@深入理解Java虚拟机:类加载机制
- 【UFO】叹为观止,美方正式公布3段UFO视频,目击者:已经无法用常理解释
- UFO@美方正式公布3段UFO视频,目击者:已经无法用常理解释
- 「航天」人类寿命可达1000年,剩下的900年被谁拿走了?专家给出合理解释
- 「海报新闻客户端」优质鲁货深入对接电商平台“牵手”阿里、京东等扩大线上销售
- 『科学家』蚂蚁并非是二维生物,科学家发现多维度空间,人类一直理解错了
- 手机大魔王@深入分析华为Nova7,这款手机到底值不值?