两线程循环

来源:互联网 发布:淘宝办假身份在哪办 编辑:程序博客网 时间:2024/06/01 09:43
/** *子线程循环 10 次,接着主线程循环5次, *接着又回到子线程循环 10 次,接着再回到主线程又循环 5次, *如此循环50次,请写出程序 */package test;public class ThreadTest {public static void main(String[] args) {// TODO Auto-generated method stubnew 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();}}}