我正在调试一个程序,我通过将两个不同的方法放在同步中解决了这个问题。奇怪的是,在此之前,我已经使用了锁,但没有成功。
public void method()
{
lock.lock(); //lock
if(nReaders > 0){
readers.await(); }//await
nReaders++;
...
nReaders--;
readers.signal(); //signal
lock.unlock(); //lock
}
我认为这相当于这个
public synchronized void method(){}
但不幸的是,情况似乎并非如此......我在这里缺少什么?
答案 0 :(得分:2)
一个锁定在具体的Lock对象上,另一个锁定在this
上,这是一个很大的区别,特别是如果锁定对象对于此类的所有实例都相同。如果此对象有多个实例,则每个实例都将锁定自身,这可能不是您想要的。