子线程先执行和主线程交替执行

package thread.tongbu;
/**
 * 如题:
 * 子线程先执行10次,然后主线程执行100次
 * 然后子线程再执行10次,主线程再执行100次
 * 如此往复20次
 *
 */
public class Test {

	public static void main(String[] args) throws InterruptedException {
		
		final Bus bus=new Bus();
		
		new Thread(new Runnable() {

			@Override
			public void run() {
				for(int j=0;j<20;j ++){
					try {
						bus.sub(j);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();

		

		for(int j=0;j<20;j++){
			bus.main(j);
		}

	}
}



package thread.tongbu;

package thread.tongbu;

public class Bus {
	
	private boolean shouldGoSub=true;//是否应该走子线程
	
	public synchronized void sub(int j) throws InterruptedException{
		if(!shouldGoSub){
			this.wait();//使当前线程等待,调用wait的对象与synchronized中的对象必须是一个,否则异常
		}
		for (int i = 1; i <= 10; i++) {
			System.out.println("子线程:"
					+ Thread.currentThread().getName() + "循环了:" + i
					+ "次");
		}
		shouldGoSub=false;
		this.notify();//唤醒其他等待的线程
	}
	
	public synchronized void main(int j) throws InterruptedException{
		if(shouldGoSub){
			this.wait();//使当前线程等待,调用wait的对象与synchronized中的对象必须是一个,否则异常
		}
		for (int i = 1; i <= 100; i++) {
			System.out.println("主线程:" + Thread.currentThread().getName()
					+ "循环了:" + i + "次");
		}
		shouldGoSub=true;
		this.notify();//唤醒其他等待的线程
	}
}

你可能感兴趣的:(主线程后执行然后循环交替执行,子线程先执行)