线程通信
- wait() 与 notify() 和 notifyAll()
- wait():令当前线程挂起并放弃 CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候在再次对资源的访问
- notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
- notifyAll():唤醒正在排队等待资源的所有线程结束等待
- java.lang.Object 提供的这三个方法只有在 synchronized(同步锁)方法或synchronized(同步锁)代码块中才能使用,否则会报出异常: java.lang.InterruptedException
wait() 方法
-
在当前线程中调用方法:
对象名.wait();
-
使当前线程进入等待(某对象)状态,知道另一线程对该对象发出 notify(或 notifyAll)为止
-
调用方法的必要条件:当前线程必须具有对该对象的监控权(加了锁)
-
调用此方法后,当前线程将释放对象监控权,然后进入等待
-
在当前线程被 notify 后,要重新获得监控权,然后从断点处继续代码的执行。
notify() 和 notifyAll()
-
在当前线程中调用方法:
对象名.notify(); 对象名.notifyAll();
-
功能:唤醒等待该对象监控权的一个线程
-
调用方法的必要条件:当前线程必须具有对该对象的监控权(加了锁)