题目描述:
子线程循环2次,主线程循环2次,然后子线程循环2次,主线程循环2次,这样循环10次;
分析:
两个线程,一个负责子循环两次,另外一个负责主循环两次,用两个锁,用锁的目的就是线程各自进行,互不打扰,当到临界条件时,我不能进行,你也不能进行,完成分配。
实现代码
class Test {
private boolean flag = true;// 代表是否等待
public synchronized void run1() {
try {
while (flag != true) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 2; i++) {
System.out.println("run1执行"+i+"次");
}
flag = false;
notify();
}
public synchronized void run2() {
try {
while (flag) {
wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 2; i++) {
System.out.println("run2执行--" + i + "次");
}
flag = true;
notify();
}
}
public class Demo {
public static void main(String[] args) {
Test mywork = new Test();
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 10; i++) {
mywork.run1();
mywork.run2();
}
}
}).start();
}
}
输出
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次
run1执行0次
run1执行1次
run2执行--0次
run2执行--1次