使用 ReentrantLock 是否像同步一样可靠?
Is using ReentrantLock reliable as synchronized?
找了很多但是搞混了'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:保证使用synchronized关键字获取对象锁。
但是
例如 2: 是否保证使用 lock.lock() 方法??还是线程会继续执行下一行??没有获取锁。
我对此表示怀疑,因为使用线程多次给我带来意想不到的结果。
只有一个线程会获取锁:这是ReentrantLock
的约定。
因此您的示例 2 是完全线程安全的。
找了很多但是搞混了'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:保证使用synchronized关键字获取对象锁。
但是
例如 2: 是否保证使用 lock.lock() 方法??还是线程会继续执行下一行??没有获取锁。
我对此表示怀疑,因为使用线程多次给我带来意想不到的结果。
只有一个线程会获取锁:这是ReentrantLock
的约定。
因此您的示例 2 是完全线程安全的。