两线程循环

/**
 *子线程循环 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();
		}
		
	}	
}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值