WAITING 期待唤醒状态(线程之间的通信)
进入Timewaiting(计时期待)有两法:
- sleep(), 线程睡醒后进入Runable/阻塞状态
- wait(long m), 完结后没有被唤醒,会主动醒来
只有锁对象能力调用wait办法和notify办法
public class WaitAndNotify { public static void main(String[] args) { //创立锁对象 Object obj = new Object(); //顾客线程 new Thread() { @Override public void run() { //保障wait和notify只能有一个执行 synchronized (obj) { System.out.println("买多少包子"); //调用wait办法,因为父类没有throw异样,所以只能用try...catch try { obj.wait(); } catch (InterruptedException e) { e.printStackTrace(); } //唤醒之后执行的代码 System.out.println("包子曾经做好,开吃"); } } }.start(); //老板线程 new Thread() { @Override public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj) { System.out.println("曾经做好了"); obj.notify(); } } }.start();; }}
唤醒(2法):
- notify()唤醒单个
- notifyAll()唤醒全副