synchronized(this)
{
   try {
       dThread.wait(); // 暂停线程
   }catch(InterruptedException e) {
       e.printStackTrace();
   }
}
synchronized(this),会获得this的对象锁,dThread.wait()会让该调用线程wait在dThread对象的等待池中,然后该线程会释放dThread锁,由于线程没有dThread对象锁,所以会报IllegalMonitorStateException。同样的道理适合notify(),notifyAll().
所以可以这样写:
synchronized(dThread)
{
   try {
       dThread.wait(); // 暂停线程
   }catch(InterruptedException e) {
       e.printStackTrace();
   }
}
synchronized(dThread)
{
       dThread.notify(); // 恢复线程
}


wait的目的就在于暴露出对象锁,让其他线程可以通过对象的notify叫醒等待在该对象的等该池里的线程。同样notify也会释放对象锁,在调用之前必须获得对象的锁,不然也会报异常。

\

wd_ybyq 发表于 http://bbs.csdn.net/topics/350162289

相关文章:

  • 2021-11-18
  • 2021-06-13
  • 2021-06-30
  • 2022-12-23
  • 2021-06-04
  • 2021-05-23
  • 2022-02-18
猜你喜欢
  • 2021-09-03
  • 2022-12-23
  • 2021-12-17
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2021-06-05
相关资源
相似解决方案