Reentrant锁定获取锁定的对象是什么?

时间:2015-08-23 07:12:57

标签: multithreading java.util.concurrent reentrantlock

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

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

}

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

}
finally{
lock.unlock();
}

它说两段代码都是等价的。我没有得到的是Fist piece synchronized block获取obj对象的锁定。但是,Reentrant锁定获取锁定的对象是什么?我可以像synchronized(obj)一样指定我想要锁定的对象吗?

1 个答案:

答案 0 :(得分:0)

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