0

我搜索了很多,但对'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()方法获取锁?还是线程会继续执行下一行?没有获得锁。

我对此表示怀疑,因为使用线程多次给我带来了意想不到的结果。

4

1 回答 1

5

只有一个线程会获得锁:这是ReentrantLock.

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

于 2015-11-14T04:02:42.110 回答