线程通信
线程通信:交错打印
涉及到的方法:
notify();
wait();
必须是同步代码块,或者同步方法才可以使用
class number implements Runnable{ private int num=1; @Override public void run() { while (true){ synchronized (this){ notify(); //notify方法 /notifyAll方法 if (num<=100){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+":"+num); num++; try { wait(); //wait方法 } catch (InterruptedException e) { e.printStackTrace(); } }else { break; } } } } }
wait:一旦执行此方法,当前线程就会进入阻塞状态,并释放同步监视器
notify:一旦执行此方法,就会唤醒被wait的一个线程,如果多个线程被wait,就唤醒优先级高的
notifyAll:一旦执行此方法,就会唤醒所有被wait的线程
sleep与wait的不同:1.两个方法声明的位置不同:Thread类中声明sleep,object类中声明wait
2.调用的要求不同:sleep可以在任何需要的场景下调用,wait只能在同步代码块护着同步方法中
3.关于是否释放同步监视器:如果两个方法都使用在同步代码块或者同步方法中,sleep不释放同步监视器

浙公网安备 33010602011771号