您好我对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)一样指定我想要锁定的对象吗?
答案 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
。因此,虽然您列出的代码示例在功能上是等效的,但它们不一定能保证相同的实现。