티스토리 뷰
제품을 생산하여 재고를 입고시켜 증가시키고
소비자에게 판매하기 위해 출고하여 재고를 감소시킴
Customer.java
public class Customer extends Thread{
private Product pd;
public Customer(Product vec){
pd = vec;
//제품 할당
}
public void run(){
char ch;
for(int i=0;i<=26;i++){
ch = pd.get(); //제품명
System.out.println("소비자가 제품"+ch+"을(를) 소비했습니다. \n");
}
}
}
Product.java
package multiThread;
import java.util.Vector;
public class Product {
Vector<Character> vec;
Product() {
vec = new Vector<Character>();
// 캐릭터 벡터
}
// 동기화
synchronized void put(char ch) {
while (vec.size() == 5) {
try {
wait();
// 재고의 개수가 5개가 되면 기다림
// 즉 재고를 최대 5개로 유지한다. -> 계속 출고된다.
} catch (InterruptedException e) {
}
}
System.out.println("생산자가 제품" + ch + "을(를) 생산했습니다.\n");
try {
Thread.sleep(500);
} catch (Exception e) {
}
vec.add(new Character(ch));
// /벡터에 제품을 추가
System.out.println("창고에 제품" + ch + "가 입고 되었습니다.\n");
System.out.println("재고 수량" + vec.size() + "\n");
notifyAll(); // 스레드 깨움
}
// 동기화
synchronized char get() {
while (vec.size() == 0) {
try {
wait(); // 재고가 없을 경우 기다린다.
} catch (InterruptedException e) {
}
}
try {
Thread.sleep(500);
} catch (Exception e) {
}
Character ch = (Character) vec.remove(0);
// 첫 번째 제품부터 출고한다. -> 벡터에서 제거
System.out.println("창고에서 제품" + ch + "가 출고 되었습니다. \n");
System.out.println("재고 수량 : " + vec.size() + "\n");
notifyAll(); // 스레드 깨움
return ch.charValue();
}
}
Producer.java
public class Producer extends Thread {
private Product pd;
public Producer(Product vec) {
pd = vec;
//제품 할당
}
public void run() {
for (char ch = 'A'; ch <= 'Z'; ch++) {
pd.put(ch); //제품명 기입 A to Z
}
}
}
myTest.java
package multiThread;
public class myTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Product pd = new Product();
Producer p = new Producer(pd);
Customer c = new Customer(pd);
//producer에서 제품을 생산하고
//customer에서 소비한다.
p.start();
c.start();
}
}
'java,web study > 3주차 (7월 15일 ~21일)' 카테고리의 다른 글
메모장 프로젝트 분석 결과 (0) | 2013.07.17 |
---|---|
Migration (0) | 2013.07.17 |
스레드 인터럽트 (0) | 2013.07.17 |
데몬 스레드 (0) | 2013.07.17 |
스레드 예제 (성금 모금) (0) | 2013.07.17 |