0

我正在调试一个程序,我通过将同步放入 2 种不同的方法解决了这个错误。奇怪的是,在此之前,我使用过锁,但没有成功。

public void method()    
{
    lock.lock(); //lock
    if(nReaders > 0){

    readers.await(); }//await

    nReaders++;



    ...


    nReaders--;

    readers.signal(); //signal
    lock.unlock(); //lock
}

我认为这相当于这个

public synchronized void method(){}

但不幸的是,情况似乎并非如此......我在这里错过了什么?

4

1 回答 1

2

一个锁在具体的 Lock 对象上,另一个锁在 上this,这是一个很大的区别,特别是如果这个类的所有实例的锁对象都相同的话。如果这个对象有多个实例,那么每个实例都会自己锁定,这可能不是你想要的。

于 2013-10-18T03:43:41.110 回答