使用 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 是完全线程安全的。