多线程通信可以参考两线程间通信 现在要实现aaa bbbbb ccccccc轮询打印
package Thread01;public class T1 extends Thread{ PRinter p; public T1(Printer p){ this.p=p; } public void run(){ while(true){ try { p.printA(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}package Thread01;public class T2 extends Thread { Printer p; public T2(Printer p){ this.p=p; } public void run(){ while(true){ try { p.printB(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}package Thread01;public class T3 extends Thread{ Printer p; public T3(Printer p){ this.p=p; } public void run(){ while(true){ try { p.printC(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}package Thread01;public class Printer { int flag = 1; public void printA() throws InterruptedException { synchronized (this) { while(flag!=1)//注意判断条件变成while { this.wait(); } System.out.print("a"); System.out.print("a"); System.out.print("a"); System.out.println(); flag = 2; this.notifyAll();// 唤醒其他线程 } } public void printB() throws InterruptedException { synchronized (this) { while(flag!=2) { this.wait(); } System.out.print("b"); System.out.print("b"); System.out.print("b"); System.out.print("b"); System.out.print("b"); System.out.println(); flag = 3; this.notifyAll(); } } public void printC() throws InterruptedException { synchronized (this) { while(flag!=3){ this.wait(); } System.out.print("c"); System.out.print("c"); System.out.print("c"); System.out.print("c"); System.out.print("c"); System.out.print("c"); System.out.print("c"); System.out.println(); flag = 1; this.notifyAll(); } }}变成while不用if就是为了在唤醒后,继续判断一下flag标志位。这样才能实现aaa bbbbb ccccccc轮询打印。
新闻热点
疑难解答