生產消費問題

託帕發表於2018-09-10
class Ck{
	private char[] rl=new char[8];
	private int up=0;

	public synchronized void shengchan(char aa){
		while(up==rl.length){
			try{
				this.wait();
			}
			catch(Exception e){

			}
		}
		this.notify();//叫醒另一個執行緒,是在當前執行緒處於就緒狀態的前提下
		rl[up]=aa;
		++up;
		System.out.println("生產執行緒正在生產第"+up+"個產品,該產品是:"+aa);
	}

	public synchronized	void xiaofei(){
		char aa;
		while(up==0){
			try{
				this.wait();
			}
			catch(Exception e){

			}
		}
		this.notify();
		aa=rl[up-1];//
		System.out.println("消費執行緒正在消費低第"+up+"個產品,該產品是"+aa);
        --up;
	}
}

class Sc implements Runnable{
	private Ck xc=null;
	public Sc(Ck xc){
		this.xc=xc;
	}
	public void run(){
		char aa;
		for(int i=0;i<26;i++){
			aa=(char)('A'+i);
			xc.shengchan(aa);
		}
	}
	
}
class Xf implements Runnable{
	private Ck xc=null;
	public Xf(Ck xc){
		this.xc=xc;
	}
	public void run(){
		for(int i=0;i<26;i++){
			xc.xiaofei();
		}
	}
}

public class Test{
	public static void main(String[] args){
        Ck ck=new Ck();
        
        Sc sc=new Sc(ck);
        Xf xf=new Xf(ck);
        
        Thread xc1=new Thread(sc);
        xc1.start();
        
        Thread xc2=new Thread(xf);
        xc2.start();
	}
}

相關文章