三个线程间的通讯:
1、代码示例如下:
package com.jh.www;
public class Demo2 {
public static void main(String[] args) {
Printer p = new Printer();
new Thread () {
public void run() {
while(true) {
try {
p.print1();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}.start();
new Thread () {
public void run() {
while(true) {
try {
p.print2();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}.start();
new Thread () {
public void run() {
while(true) {
try {
p.print3();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}}.start();
}
}
class Printer{
private int flag=1;
public void print1() throws InterruptedException{
synchronized(this) {
while (flag!=1) {
this.wait();
}
System.out.print("你");
System.out.print("好");
System.out.print("陌");
System.out.print("生");
System.out.print("人");
System.out.print("\r\n");
flag=2;
this.notifyAll();
}
}
public void print2() throws InterruptedException{
synchronized(this) {
while (flag!=2) {
this.wait();
}
System.out.print("我");
System.out.print("爱");
System.out.print("你");
System.out.print("北");
System.out.print("京");
System.out.print("\r\n");
flag=3;
this.notifyAll();
}
}
public void print3() throws InterruptedException{
synchronized(this) {
while (flag!=3) {
this.wait();
}
System.out.print("我");
System.out.print("也");
System.out.print("爱");
System.out.print("你");
System.out.print("\r\n");
flag=1;
this.notifyAll();
}
}
}
2、备注:
1)、if判断是从哪里睡着从哪里醒;
while循环会重新开始判断
2)、notifyAll()是唤醒所有线程;