我进行了很多搜索,但对“ 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/