/**
*子线程循环 10 次,接着主线程循环5次,
*接着又回到子线程循环 10 次,接着再回到主线程又循环 5次,
*如此循环50次,请写出程序
*/
package test;
public class ThreadTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
new ThreadTest().init();
}
public void init(){
final Business business = new Business();
new Thread(
new Runnable(){
public void run(){
for(int i=0; i<50; i++){
business.SubThread(i);
}
}
}).start();//子线程
for(int i=0; i<50; i++){
business.MainThread(i);
}//主线程main
}
private class Business{
boolean bShouldSub = true;//定义信号灯,控制谁该执行
public synchronized void MainThread(int i){
if(bShouldSub){
try{
this.wait();//暂时释放锁,等待通知
}catch(InterruptedException e){
e.printStackTrace();
}
}
//bShouldSub = false;
for(int j=0; j<5; j++){//主线程5次
System.out.println(Thread.currentThread().getName()+":i="+i+", j="+j);
}
bShouldSub = true;//之后,即使又获得锁,也会在if(){}中wait()
this.notify();
}
public synchronized void SubThread(int i){
if(!bShouldSub){
try{
this.wait();
}catch(InterruptedException e){
e.printStackTrace();
}
}
//bShouldSub = true;
for(int j=0; j<10; j++){//子线程10次
System.out.println(Thread.currentThread().getName()+":i="+i+", j="+j);
}
bShouldSub = false;//之后,即使又获得锁,也会在if(){}中wait()
this.notify();
}
}
}
两线程循环
最新推荐文章于 2021-05-11 21:29:42 发布