Java Lock对象是否强制执行之前发生的关系?

时间:2015-09-30 10:13:55

标签: java multithreading locking memory-model happens-before

根据文档provides more extensive locking operations than can be obtained using synchronized methods and statements.

,Java在并发包中提供了一个Lock对象

除了互斥之外的同步方法/块,强制执行之前发生的关系,以确保一个线程对变量所做的更改对另一个线程可见。

使用Lock对象时是否会发生这种关系?对于所有平台,观察是否保证与同步块一样?

2 个答案:

答案 0 :(得分:2)

是的,确实如此。

  

Lock对象的工作方式与使用的隐式锁非常相似   同步代码。 与隐式锁一样,只有一个线程可以拥有一个   一次锁定对象。锁定对象也支持wait / notify   机制,通过它们相关的条件对象。

来自https://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html

答案 1 :(得分:1)

  

使用Lock对象时是否会发生这种关系?是观察   像所有平台的同步块一样保证吗?

是的,确实如此。

有几个操作可以在之前创建关系,其中一个是同步(here),而Java的锁定对象也是为了这个目的。

从Oracle文档中了解Java的Memory Consistency Properties。除了下面将在链接中突出显示。

在下面的“扩展这些保证”意味着内存一致性属性,如“之前发生”关系。 Lock类属于java.util.concurrent的子包,因此它保证了内存一致性属性,如“之前发生”关系等等。

  

java.util.concurrent及其子包中所有类的方法   将这些保证扩展到更高级别的同步。