0

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

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

}

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

}
finally{
lock.unlock();
}

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

4

1 回答 1

0

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

于 2015-08-23T07:26:57.143 回答