/**
* 题:主线程先循环20次,接着子线程循环10次,如此周而复始50次
* 线程wait,notify应用
*/
public class ZL {
public static int total_loop_count = 50;//欲循环的总次数
public static int curr_loop_count = 1;//当前已循环次数
public static void main(String[] args) {
Thread c = new CThread();
c.setName("子子子子子线程");
c.start();
}
}
class PThread extends Thread {
/*
* 主线程循环20次
*/
public void run() {
synchronized (String.class) {
for (int i = 1; i <= 20; i++) {
System.out.println("第" + ZL.curr_loop_count + "轮," + Thread.currentThread().getName() + ":" + i);
if (i == 20) {
String.class.notifyAll();
}
}
}
}
}
class CThread extends Thread {
/*
* 子线程循环10次
*/
public void run() {
synchronized (String.class) {
Thread p = new PThread();
p.setName("主线程");
p.start();
try {
String.class.wait();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for (int i = 1; i <= 10; i++) {
System.out.println("第" + ZL.curr_loop_count + "轮," + Thread.currentThread().getName() + ":" + i);
if(i==10){
ZL.curr_loop_count ++;
if(ZL.curr_loop_count > ZL.total_loop_count){
break;
}
Thread c = new CThread();
c.setName("子子子子子线程");
c.start();
}
}
}
}
}