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