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();
}
}
}
标签:10,int,void,subFlag,线程,执行,public,loop From: https://blog.51cto.com/u_21817/6066953