7

Java 在并发包中提供了一个 Lock 对象,根据文档provides more extensive locking operations than can be obtained using synchronized methods and statements.

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

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

4

2 回答 2

3

是的,它确实。

锁对象的工作方式与同步代码使用的隐式锁非常相似。与隐式锁一样,一次只有一个线程可以拥有一个 Lock 对象。锁定对象还通过其关联的 Condition 对象支持等待/通知机制。

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

于 2015-09-30T10:18:10.093 回答
2

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

是的,它确实。

有几个动作可以创建先发生关系,其中之一是同步(此处),Java 的锁对象也用于此目的。

从 Oracle 文档中了解 Java 的内存一致性属性。除了下面将在链接中突出显示的内容。

在下面的“扩展这些保证”中,表示内存一致性属性,如“之前发生”关系。Lockclass 属于 的子包java.util.concurrent,因此它保证了“happens-before”关系等内存一致性属性。

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

于 2015-09-30T10:29:53.887 回答