通信
1. 等待
在同步代码中调用锁对象的wait()方法,可以让当前线程等待
2. 通知唤醒
使用锁对象的notify()方法可以唤醒在该对象上等待的随机一个线程
使用锁对象的notifyAll()方法可以唤醒在该对象上等待的所有线程
示例:
创建三个线程,其中一个线程内部执行3次打印,第二个线程内部执行5次打印,第三个线程内部执行7次打印,如此交替执行10次。
public class NotifyTest {
public static void main(String[] args) {
final NotifyService service = new NotifyService();
//线程一
new Thread(new Runnable() {
public void run() {
for (int j = 0; j < 10; j++)
service.print1(j);
}
}).start();
//线程二
new Thread(new Runnable() {
public void run() {
for (int j = 0; j < 10; j++)
service.print2(j);
}
}).start();
//线程三
new Thread(new Runnable() {
public void run() {
for (int j = 0; j < 10; j++)
service.print3(j);
}
}).start();
}
}
class NotifyService {
private int flag = 1; // 当前轮到哪个
public synchronized void print1(int j) {
while(flag != 1){
try {
this.wait(); // 如果不该1, 就等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < 3; i++){
System.out.println("线程1: " + j);
}
System.ou