`

happens-before原则

    博客分类:
  • j2se
阅读更多
 下面是java内存模型下一些“天然”的先行发生关系,这些先行发生关系无须任何同步器协助就已经存在,可以在编码中直接使用。如果两个操作之间的关系不再此列,并且无法从下面规则中推导出来,则它们就没有顺序性保障,虚拟机可以对它们进行任意地重排序。

 

1.Program order rule. Each action in a thread happens-before every action in
 that thread that comes later in the program order.

    程序次序规则:在一个线程内,按照程序代码的顺序,书写在前面的操作先行发生与书写在后面的操作。

 

2.Monitor lock rule. An unlock on a monitor lock happens-before every subsequent
 lock on that same monitor lock.

   冠程锁定规则:一个锁的unlock操作先行发生于“后面”对同一个锁的lock操作。这里的“后面”是指时间上的先后顺序。

 

3.Volatile variable rule. A write to a volatile field happens-before every
 subsequent read of that same field.

 volatile变量规则:对一个volatile变量的写操作先行发生于“后面”对这个变量的读操作。这里的“后面”同样是指时间上的先后顺序。

 

4.Thread start rule. A call to Thread.start on a thread happens-before any 
other thread detects taht thread has terminated, either by successfully 
return from Thread.join or by Thread.isAlive returning false.

 线程的启动规则:Thread对象的start()方法先行发生于此线程的没一个动作。

 

5.Interruption rule. A thread calling interrupt on another thread 
happens-before the interrupted thread detects the interrupt( either by
 having InterruptedException thrown, or invoking isInterrupted or
 interrupted).

 线程中断规则:对线程的interrupt()方法的调用先行发生于被中断线程的代码检测。

6.Finalizer rule. The end of a constrcutor for an object happens-before the
 start of the finalizer for that obejct.

 对象终结原则:一个对象的初始化完成(构造函数执行完成)先行发生与它的finalize()方法的开始。

 

7.Transitivity. If A happens-before B, and B happens-before C, then A 
happens-before C.

 传递性:你懂的。

 

 

 

分享到:
评论

相关推荐

    happens-before俗解

    ### Happens-Before原则详解 #### 一、引言 Happens-before原则是Java并发编程中的一个重要概念,用于描述程序中的操作之间的顺序关系。它不仅有助于理解和解决并发编程中的可见性问题,还为程序员提供了关于多...

    深入浅出了解happens-before原则

    "深入浅出了解happens-before原则" 在 Java 内存模型(JMM)中,happens-before 原则是一个核心概念,它规定了多线程环境下的可见性原则。该原则的核心思想是:两个操作之间的 happens-before 关系,并不意味着前一...

    浅谈Java内存模型之happens-before

    happens-before原则的定义是:如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。这个原则可以帮助我们判断数据是否存在竞争,线程...

    简单易懂讲解happens-before原则

    为了解决这个问题,Java引入了"happens-before"原则,它是一种确保正确同步和数据可见性的规则。 1. **程序顺序规则**: 这个规则指出,在同一线程内,程序中表现出的顺序应该被维护,即每个操作`happens-before`...

    volatile与happens-before的关系与内存一致性错误

    在Java并发编程中,理解和掌握volatile关键字以及happens-before原则对于解决内存一致性错误至关重要。内存一致性错误通常出现在多线程环境下,当不同线程访问共享变量时,由于缓存和处理器优化,可能导致数据不一致...

    13Java内存模型1

    在Java 5及以后的版本中,引入了happens-before原则,来保证并发程序的正确性。 happens-before原则是Java内存模型中的一个重要概念,它定义了两个操作之间的内存可见性。如果操作X happens-before 操作Y,那么X对Y...

    Java内存模型的历史变迁.docx

    随着并发编程需求的增长,Java从JDK5开始引入了新的内存模型,它基于happens-before原则,这是一个由Leslie Lamport提出的用于描述事件顺序的概念。新内存模型用happens-before规则来规定操作之间的执行顺序,以确保...

    13 问题的根源—Java内存模型简介.pdf

    Java内存模型(JMM,Java Memory Model)是Java并发编程中的关键概念,它定义了Java程序中各个线程对共享变量的访问规则,确保...通过遵循Happens-Before原则,我们可以有效地避免并发问题,实现高效且可靠的并发程序。

    彩虹岛启动器qtga.dll

    happens-before原则是Java内存模型中定义的两项操作之间的偏序关系,如果说操作A先行发生于操作B,其实就是说在发生操作B之前,操作A产生的影响能被操作B观察到。“影响”包括修改了内存中共享变量的值、 发送了消息...

    JSR133中文版.pdf

    从标签来看,文档会涉及如JSR(Java Specification Request)、内存模型、线程规范以及happens-before原则和synchronized关键字。这些词汇暗示了文档将对Java内存模型进行深入讲解,并探讨多线程环境下的线程通信和...

    锁的释放-获取建立的happens before 关系

    这种关系是由Java内存模型(Java Memory Model,JMM)中的happens before原则定义的。 首先,我们需要理解happens before的概念。在JMM中,如果一个操作happens before另一个操作,那么第一个操作的结果对第二个...

    并发编程的魅力fager20200614.docx

    Happens-before原则(先行发生原则) a.程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作;(保证单线程,但不保证多线程); b.锁定规则:一个unlock操作先行发生于后面对同一个锁...

    深入理解Java内存模型??总结

    JMM定义了happens-before原则,这是一个用于描述线程间操作顺序的重要概念。如果一个操作happens-before另一个操作,那么第一个操作的结果对第二个操作必须是可见的,并且第一个操作的执行顺序在程序逻辑上被认为是...

    深入理解Java内存模型(一)共3页.pdf.zip

    但是,JMM规定了在某些特定情况下,重排序必须遵守happens-before原则。 6. **final域的语义**: - 对于final字段,一旦初始化完成,就无法改变。这保证了在多线程环境下,final字段对所有线程的可见性。 7. **...

    java内存模型与并发技术.ppt

    happens-before原则是JMM中的关键概念,它定义了一种部分顺序关系。如果一个动作A发生在另一个动作B之前(即A happens-before B),那么B必须能看到A的结果。例如,释放锁的动作(unlock)总是发生在后续获取同一锁...

    Java内存模型分析与其在编程中的应用.zip

    再者,JMM还规定了happens-before原则,这是一个用于判断两个操作之间是否有顺序关系的规则。如果一个操作happens-before另一个操作,那么第一个操作的改变对第二个操作来说总是可见的,并且第二个操作不能被重排序...

    并发二:原子性、可见性、有序性.pdf

    happens-before原则指的是按照写代码的主观意愿,可能期望是要么指令1先执行,要么指令3先执行,指令1先执行就不应该看到指令4写入的值,如果是指令3先执行,就不应该看到指令2写入的值。 Java内存模型(JMM)中...

    深入理解 Java 内存模型_程晓明_InfoQ_java_内存模型_

    Java通过插入适当的内存屏障来实现happens-before原则。 - **线程局部变量**(ThreadLocal):每个线程都有自己的副本,避免了线程间的数据共享问题,但也可能导致内存泄漏。 - **final域的初始化安全性**:对于一...

    深入理解Java内存模型

    9. Happens-Before原则:这是JMM定义的一种内存可见性规则,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在Happens-Before关系。这是理解和分析Java并发程序正确性的基础。 以上内容仅是...

Global site tag (gtag.js) - Google Analytics