我进行了很多搜索,但对“ ReentrantLock”和正常的“ synchronized”过程感到困惑。

例如(1):

Object obj = new Object();

synchronized(obj){
//lock is guaranteed to be acquired
}


例子(2)

Lock lock = new ReentrantLock();
lock.lock(); //problem here
try{
//dostuff
}
finally{
lock.unlock();
}


我的问题是:

在示例1中:可以确保使用synced关键字获得对象上的锁。



在示例2中:是否可以确保使用lock.lock()方法获取锁?还是线程将继续执行下一行?不获取锁。

我对此表示怀疑,因为使用线程多次导致了意外结果。

最佳答案

只有一个线程将获得该锁:这是ReentrantLock的约定。

因此,示例2完全是线程安全的。

关于java - 使用ReentrantLock可靠吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33704951/

10-12 01:26