java 实现线程之间通信的方式采用 等待/通知模式, 用到 Object
类中三个不可重写的方法: wait
, notify
, notifyAll
使用
wait
方法的注意事项:
- 在调用
wait
方法之前, 线程必须获得该对象的对象级别锁, 即只能在同步方法或同步块中调用wait
方法, 否则执行期间会抛出IllegalMonitorStateException
异常; - 当前线程在执行
wait
方法后会释放其拥有的对象锁; - 当前线程在执行
wait
期间时若发现当前线程的中断状态为true
时会抛出InterruptedException
异常;
使用 notify
/ notifyAll
方法的注意事项:
-
notify
或notifyAll
方法必须在同步方法或 同步块中调用, 即在调用前, 线程必须获得该对象的对象级别锁, 否则执行期间会抛出IllegalMonitorStateException
异常; - 执行
notify
或notifyAll
方法后当前线程不会马上释放该对象锁, 直到线程将同步方法或同步块执行完成为止;
网友评论