java - 在方法的本地范围内创建的 ReentrantLock 对象将如何工作?

标签 java multithreading locking java.util.concurrent reentrantlock

以上是 OCP 7 java se 书中的屏幕截图。第 791 页。

我的问题是,如果每次都在方法中创建一个新的 ReentrantLock 对象并锁定,那么如何阻止两个线程运行 lock解锁?两个线程不会各自创建一个ReentrantLock对象并锁定它吗?我可以想象如果 lock 对象是一个仅实例化一次且从未更改的实例变量,这将如何工作。 (最好是final)。

我是不是误解了什么?

我已经问过this并没有得到明确的答复。

最佳答案

您每次都在方法本身中创建“ReentrantLock”,以便同步该锁上的线程,这是正确的。必须有一个“共享”锁对象。

书中的例子可能有点过于简单了。

documentation of ReentrantLock使用以下示例:

class X {
   private final ReentrantLock lock = new ReentrantLock();
   // ...

   public void m() {
     lock.lock();  // block until condition holds
     try {
       // ... method body
     } finally {
       lock.unlock()
     }
   }
 }

关于java - 在方法的本地范围内创建的 ReentrantLock 对象将如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294843/

相关文章:

java - Apache Ignite - java.lang.ClassNotFoundException : Unknown pair

android - 如何在 Android 多线程程序中停止 looper.loop()?

multithreading - 可重入锁和一般概念是什么?

java - 从文本文件中读取阿拉伯字符

java - 有没有办法在Win 7下将下划线设置为 native 外观中的助记符字符?

C# 套接字异步与多线程

c++ - 数组的并行求和比 C++ 中的顺序求和慢

android - devicePolicyManager.lockNow() 不适用于摩托罗拉平板电脑

java - 从 hashmap 更改对象会影响多线程中的 wait() 方法吗?

java - logback 功能 - 如何开发滚动事件的监听器?