根据文档provides more extensive locking operations than can be obtained using synchronized methods and statements.
除了互斥之外的同步方法/块,强制执行之前发生的关系,以确保一个线程对变量所做的更改对另一个线程可见。
使用Lock对象时是否会发生这种关系?对于所有平台,观察是否保证与同步块一样?
答案 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及其子包中所有类的方法 将这些保证扩展到更高级别的同步。