首页 > 其他分享 >子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次

子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次

时间:2023-02-19 23:35:19浏览次数:43  
标签:10 int void subFlag 线程 执行 public loop


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

相关文章