java内存模型与happens-before的关系

什么是happens-before

  • Java5引入了明确定义的Java内存模型。其中最重要的一个概念就是happens-before关系。happens-before关系是用来描述两个操作的内存可见性的。如果操作X happens-before操作Y,那么X的操作结果对于Y是可见。

同一个线程中,字节码的先后顺序也暗含了happens-before关系

  • 在程序控制流中靠前的字节码happens-before靠后的字节码。然而,这并不意味着前者一定在后者之前执行。实际上,如果后者没有观测前者的云心结果,即后者没有依赖于前者,那么他们可能会被重排序。

除了线程内的happens-before关系之外,Java内存模型还定义了下述线程间的happens-before关系

  • 1、解锁操作happens-before之后(时钟顺序先后)对同一把的加锁操作。
  • 2、volatile字段的写操作happens-before之后(时钟顺序先后)对同一个字段的读操作。
  • 3、线程的启动操作(即thread.start())happens-before该线程的第一个操作。
  • 4、线程的最后一个操作happens-before他的终止事件(即其他线程通过Thread.isAlive()或者Thread.join()判断该线程是否终止)

happens-before具有传递性

  • 如果X happens-before Y,而操作Yhappens-before Z,那么Xhappens-before Z

你可能感兴趣的:(个人,技术,笔记)