Java中的happen-before规则
来源:互联网 发布:java并发编程 编辑:程序博客网 时间:2024/06/06 02:03
happen—before规则介绍
Java语言中有一个“先行发生”(happen—before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,“影响”包括修改了内存中共享变量的值、发送了消息、调用了方法等,它与时间上的先后发生基本没有太大关系。这个原则特别重要,它是判断数据是否存在竞争、线程是否安全的主要依据。
下面是Java内存模型中的八条可保证happen—before的规则,它们无需任何同步器协助就已经存在,可以在编码中直接使用。如果两个操作之间的关系不在此列,并且无法从下列规则推导出来的话,它们就没有顺序性保障,虚拟机可以对它们进行随机地重排序。
1、程序次序规则:在一个单独的线程中,按照程序代码的执行流顺序,(时间上)先执行的操作happen—before(时间上)后执行的操作。
2、管理锁定规则:一个unlock操作happen—before后面(时间上的先后顺序,下同)对同一个锁的lock操作。
3、volatile变量规则:对一个volatile变量的写操作happen—before后面对该变量的读操作。
4、线程启动规则:Thread对象的start()方法happen—before此线程的每一个动作。
5、线程终止规则:线程的所有操作都happen—before对此线程的终止检测,可以通过Thread.join()方法结束、Thread.isAlive()的返回值等手段检测到线程已经终止执行。
6、线程中断规则:对线程interrupt()方法的调用happen—before发生于被中断线程的代码检测到中断时事件的发生。
7、对象终结规则:一个对象的初始化完成(构造函数执行结束)happen—before它的finalize()方法的开始。
8、传递性:如果操作A happen—before操作B,操作B happen—before操作C,那么可以得出A happen—before操作C。
,”一个操作时间上先发生于另一个操作“并不代表”一个操作happen—before另一个操作“。
”一个操作happen—before另一个操作“并不代表”一个操作时间上先发生于另一个操作“。
- Java中的happen-before规则
- Java Happen-Before规则
- Java中 Happen-before 规则总结
- Happen-Before规则
- 什么是Java中的happen-before关系
- happen—before规则介绍
- Java中happen-before
- 重温jvm中的happen-before
- java memory happen-before rule
- 用happen-before规则重新审视DCL
- 利用Happen-Before规则分析DCL
- 用happen-before规则重新审视DCL
- 用happen-before规则重新审视DCL
- java之happen before relationship 学习篇
- java多线程学习(十) happen before 原则
- 【Java并发编程】:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)
- java并发编程(十七)--深入Java内存模型——happen-before规则及其对DCL的分析
- Java并发编程之十七:深入Java内存模型——happen-before规则及其对DCL的分析
- 利用caffe训练cifar之训练数据集合生成leveldb
- h5 的video视频控件
- Java NIO 之缓冲区
- Kubernetes编排工具-helm源码分析(helm客户端)
- poj1322 Chocolate(滚动数组dp)
- Java中的happen-before规则
- C3P0快速入门
- 两串旋转问题
- Spring基本知识
- 234. Palindrome Linked List
- java语言基础(39)——面向对象(接口的引入及特点)
- css study
- LeetCode-M-Binary Tree Level Order Traversal
- mysqlの索引原理(Ⅱ)