JAVA 의 다 중 스 레 드 로 생산자 와 소비자 문 제 를 예시 하 다.

package net.okren.java;

// JAVA                

class SynStack{
	private String[] products = new String[10];
	int index = 0;
	
	public String[] getProducts(){
		return products;
	}
	
	public synchronized void push(String product){
		if(index == products.length){
			try{
				wait();
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		notifyAll();
		products[index] = product;
		index++;
	}
	
	public synchronized String pop(){
		if(index == 0){
			try{
				wait();
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
		notifyAll();
		index--;
		return products[index];
	}
	
}

class Producer implements Runnable{
	SynStack stack;
	public Producer(SynStack stack){
		this.stack = stack;
	}
	
	public void run(){
		for(int i = 0; i < stack.getProducts().length; i++){
			String product = "   " + i;
			stack.push(product);
			System.out.println("     :" + product);
			try{
				Thread.sleep(200);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
	
}

class Consumer implements Runnable{
	SynStack stack;
	public Consumer(SynStack stack){
		this.stack = stack;
	}
	
	public void run(){
		for(int i = 0; i < stack.getProducts().length; i++){
			String product = stack.pop();
			System.out.println("   : " + product);
			try{
				Thread.sleep(500);
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}

public class JavaTest {
		
	public static void main(String[] args){

		SynStack stack = new SynStack();
		Producer p = new Producer(stack);
		Consumer c = new Consumer(stack);
		Thread t1 = new Thread(p);
		Thread t2 = new Thread(c);
		t1.start();
		t2.start();
		
		
	
		
	}
}

좋은 웹페이지 즐겨찾기