多线程系列三——java线程间通信

子线程首先循环10次,接着主线程循环100次,然后再回到子线程循环10次,接着再回到主线程循环100次,如此循环50次,程序实现:

public class TraditionalThreadCommunication {
	
	public static void main(String[] args){
		Business business = new Business();
		new Thread(
			new Runnable() {
				
				@Override
				public void run() {
					for(int i=1; i<=50; i++){
						business.sub(i);
					}
				}
			}
		).start();
		
		
		new Thread(
				new Runnable() {
					
					@Override
					public void run() {
						for(int i=1; i<=50; i++){
							business.main(i);
						}
					}
				}
			).start();
	}
}

class Business{
	
	private Boolean bShouldSub = true;
	
	public synchronized void sub(int i){
		while(!bShouldSub){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		for (int j=1; j<=10; j++) {
			System.out.println("sub thread sequece of " + j + ", loop of " + i);
		}
		bShouldSub = false;
		this.notify();
	}
	
	public synchronized void main(int i){
		if(bShouldSub){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		for (int j=1; j<=100; j++) {
			System.out.println("main thread sequece of " + j + ", loop of " + i);
		}
		bShouldSub = true;
		this.notify();
	}
	
}

Object根基类存在wait和notify两个方法可实现线程间通信,wait方法使线程进入等待状态,而notify则重新唤起阻塞线程中的一个。


你可能感兴趣的:(多线程系列三——java线程间通信)