两个线程间的通信
什么时候需要通信?---多线程并发执行时,在默认情况下CPU时随机切换线程的,如果我们希望他们有规律的执行,就可以使用通信
如何实现通信?---如果希望线程等待--wait();如果希望唤醒等待的线程---notify()
------------------这两个方法必须在同步代码中执行,并且使用同步锁对象来调用
/* * 交替打印2行字符串 */ public class Demo_07 { public static void main(String[] args) { final Printer p = new Printer(); new Thread() { public void run(){ while(true) { try { p.print1(); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); new Thread() { public void run(){ while(true) { try { p.print2(); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } } class Printer{ private int flag = 1; public void print1() throws InterruptedException { synchronized (this) { if(flag!=1) { this.wait(); //当前线程等待 } System.out.print("学"); System.out.print("习"); System.out.println(); flag = 2; this.notify(); //随机唤醒单个等待的线程,注意时随机 } } public void print2() throws InterruptedException { synchronized (this) { if(flag!=2) { this.wait(); } System.out.print("J"); System.out.print("A"); System.out.print("V"); System.out.print("A"); System.out.println(); flag = 1; this.notify(); } } }