子線程先循環十次,主線程在循環20次,再子線程循環十次,主線程循環20次,如此循環50次
1 /**
2 * 子線程先循環十次,主線程在循環20次,再子線程循環十次,主線程循環20次,如此循環50次
3 * @author llj
4 *
5 */
6 public class ThreadTest {
7
8 public static void main(String[] args) {
9 Syn syn = new Syn();
10 new Thread(new Runnable() {
11 @Override
12 public void run() {
13 for(int i=0; i<50; i++) {
14 syn.child();
15 }
16 }
17 }).start();
18 for(int i=0; i<50; i++) {
19 syn.main();
20 }
21 }
22 }
23
24 class Syn{
25 private boolean temp = true;
26 public synchronized void main() {
27 if(temp) {
28 try {
29 this.wait();//致使當前線程等待,直到另外一個線程調用該對象的 notify()方法或 notifyAll()方法
30 } catch (InterruptedException e) {
31 e.printStackTrace();
32 }
33 }
34 for(int i=0; i<20; i++) {
35 System.out.println("主線程"+i);
36 }
37 temp = true;
38 this.notify();//喚醒正在等待對象監視器的單個線程。
39 }
40 public synchronized void child() {
41 if(!temp) {
42 try {
43 this.wait();
44 } catch (InterruptedException e) {
45 e.printStackTrace();
46 }
47 }
48 for(int j=0; j<10; j++) {
49 System.out.println("子線程"+j);
50 }
51 temp = false;
52 this.notify();
53 }
54 }