Java线程面试题:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次

 1 package thread;
 2 
 3 /**
 4  * 需求:线程编程:子线程先运行 2 次,然后主线程运行 4 次,如此反复运行 3 次。
 5  * @author zhongfg
 6  * @date 2015-06-16
 7  */
 8 class Business { // 控制由谁执行
 9     boolean bShouldSub = true;
10 
11     public synchronized void MainThread(int i) {
12         if (bShouldSub) {
13             try {
14                 this.wait();
15             } catch (InterruptedException e) {
16                 e.printStackTrace();
17             }
18         }
19         for (int j = 0; j < 4; j++) {
20             System.out.println(Thread.currentThread().getName() + "-->i=" + i
21                     + ",j=" + j);
22         }
23         bShouldSub = true;
24         this.notify();
25     }
26 
27     public synchronized void SubThread(int i) {
28         if (!bShouldSub) {
29             try {
30                 this.wait();
31             } catch (InterruptedException e) {
32                 e.printStackTrace();
33             }
34         }
35         for (int j = 0; j < 2; j++) {
36             System.out.println(Thread.currentThread().getName() + "->i=" + i
37                     + ",j=" + j);
38         }
39         bShouldSub = false;
40         this.notify();
41     }
42 }
43 
44 public class ThreadInterview {
45     public static void main(String args[]) {
46 
47         ThreadInterview tp = new ThreadInterview();
48         tp.init();
49     }
50 
51     public void init() {
52 
53         final Business business = new Business();
54         new Thread(new Runnable() {
55 
56             public void run() {
57                 for (int i = 0; i < 3; i++) {
58                     // 调用子线程中的方法
59                     business.SubThread(i);
60                 }
61             }
62         }).start();
63 
64         for (int i = 0; i < 3; i++) {
65             business.MainThread(i);
66         }
67     }
68 }
69 
70 运行结果:
71 Thread-0->i=0,j=0
72 Thread-0->i=0,j=1
73 main-->i=0,j=0
74 main-->i=0,j=1
75 main-->i=0,j=2
76 main-->i=0,j=3
77 Thread-0->i=1,j=0
78 Thread-0->i=1,j=1
79 main-->i=1,j=0
80 main-->i=1,j=1
81 main-->i=1,j=2
82 main-->i=1,j=3
83 Thread-0->i=2,j=0
84 Thread-0->i=2,j=1
85 main-->i=2,j=0
86 main-->i=2,j=1
87 main-->i=2,j=2
88 main-->i=2,j=3
原文地址:https://www.cnblogs.com/zfg-technology/p/3572416.html