【问题标题】:On what object Reentrant lock aquire lock on?在什么对象上重入锁获取锁?
【发布时间】:2015-08-23 07:12:56
【问题描述】:

您好,我对 Concurrent 包中的 ReentrantLocks 有疑问。

//First
Object ob = new Object();
synchronized(ob){

}

//Second
Lock lock = new ReentrantLock();
lock.lock();
try{

}
finally{
lock.unlock();
}

它说两段代码是等价的。我没有得到的是在 Fist 块同步块中获取 obj 对象的锁定。但是可重入锁在什么对象上获取锁呢?我可以像 synchronized(obj) 一样指定我想要锁定的对象吗?

【问题讨论】:

    标签: multithreading java.util.concurrent reentrantlock


    【解决方案1】:

    深入研究 OpenJDK 源代码(我从 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/locks/ReentrantLock.java#ReentrantLock.lock%28%29 开始),如果您使用了默认的 ReentrantLock 构造函数,它最终会使用 unsafe.compareAndSetInt。因此,尽管您列出的代码示例在功能上是等效的,但它们不一定保证相同的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多