绝对等效的同步块?

时间:2013-10-18 03:42:01

标签: java multithreading synchronization

我正在调试一个程序,我通过将两个不同的方法放在同步中解决了这个问题。奇怪的是,在此之前,我已经使用了锁,但没有成功。

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

    readers.await(); }//await

    nReaders++;



    ...


    nReaders--;

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

我认为这相当于这个

public synchronized void method(){}

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

1 个答案:

答案 0 :(得分:2)

一个锁定在具体的Lock对象上,另一个锁定在this上,这是一个很大的区别,特别是如果锁定对象对于此类的所有实例都相同。如果此对象有多个实例,则每个实例都将锁定自身,这可能不是您想要的。