【发布时间】:2013-05-02 15:57:54
【问题描述】:
假设我在 Java 中有一个读/写监视器实现。
几个读者或一个作家可以在任何时候访问数据库(不能同时访问)
class RWmonitor{
private int readers = 0;
private boolean writing = false;
public synchronized void StartRead(){ ..}
public synchronized void EndRead(){
notifyAll();
readers--;
}
public synchronized void StartWrite(){ ..}
public synchronized void EndWrite(){
notifyAll();
writing = false;
}
}
现在,notifyAll() 不是同步方法中的最后一条语句有关系吗?
假设:
1) EndRead() 执行
2) notifyAll() 通知所有等待的线程
3) 然后它会减少读者数量。
当它执行notifyAll() 时,是否会因为被唤醒的线程等待释放 RWmonitor 上的锁而导致成本更高? (假设锁在 RWmonitor 上的线程还在readers--;)
【问题讨论】:
标签: java concurrency monitors