package com.mhm.test1;


/**
* 子线程跑10次,主线程跑5次,然后子线程再跑10次,主线程再跑5次,往返3次
* @author Mahone
*
*/
public class Test2 {

public static void main(String[] args) {
Test2 t2 = new Test2();
t2.init();
}

private void init() {
final Business b = new Business();

Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i <3; i++) {
b.sub(i);
}
}
});
t.start();
for (int i = 0; i <3; i++) {
b.main(i);
}

}


/**
* 业务类
* @author Administrator
*
*/
class Business {
// 默认subFlag为true,子线程可执行
private boolean subFlag = true;

public synchronized void sub(int loop) {
// 如果子线程不可执行,则当前线程等待,CPU给其他线程使用
if (!subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

for (int i = 0; i < 10; i++) {
System.out.println("loop: " + loop + " sub-" + Thread.currentThread().getName());
}

// 执行完子线程,子线程flag设为false
subFlag = false;
// 通知其他线程开始响应
this.notify();
}


public synchronized void main (int loop) {
if (subFlag) {
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

for (int i = 0; i < 5; i++) {
System.out.println("loop: " + loop + " main-" + Thread.currentThread().getName());
}

subFlag = true;
this.notify();
}
}


}