생산소비패턴2
import java.util.*;
class Producer extends Thread{
Resource source;
public Producer(String n, Resource s){
super(n);
source=s;
}
public void run(){
for(char ch='A'; ch<'J'; ch++){
System.out.println(getName()+"가 제품["+ch+"]를 생산했다.");
source.put(ch);
}
}
}
class Consumer extends Thread{
Resource source;
public Consumer(String n, Resource s){
super(n);
source=s;
}
public void run(){
char getch=' ';
for(char ch='A'; ch<'J'; ch++){
getch=source.get();
System.out.println(getName()+"가 제품["+getch+"]를 소비했다.");
}
}
}
class Resource{
Vector<Character> vec;
static Producer p;
static Consumer c;
public Resource(){
vec=new Vector<Character>();
}
public void put(char ch){
while(vec.size()==3){
try{
Thread.sleep(5000);
}catch(InterruptedException e){}
}
vec.add(ch);
System.out.println("창고에 제품["+ch+"]가 들어왔다. 재고수량:"+vec.size());
c.interrupt();
}
public char get(){
while(vec.size()==0){
try{Thread.sleep(5000);}catch(InterruptedException e){}
}
Character ch=vec.remove(0);
System.out.println("창고에 제품["+ch+"]가 나갔다. 재고수량:"+vec.size());
p.interrupt();
return ch.charValue();
}
public static void main(String args[]){
Resource r=new Resource();
p=new Producer("생산자",r);
c=new Consumer("소비자",r);
p.start(); c.start();
}
}