首页 > 学院 > 开发设计 > 正文

多线程通信

2019-11-06 09:19:52
字体:
来源:转载
供稿:网友

多线程通信可以参考两线程间通信 现在要实现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轮询打印。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表