티스토리 뷰


제품을 생산하여 재고를 입고시켜 증가시키고

소비자에게 판매하기 위해 출고하여 재고를 감소시킴



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();

}

}



결과 : 
생산자가 제품A을(를) 생산했습니다.

창고에 제품A가 입고 되었습니다.

재고 수량1

생산자가 제품B을(를) 생산했습니다.

창고에 제품B가 입고 되었습니다.

재고 수량2

생산자가 제품C을(를) 생산했습니다.

창고에 제품C가 입고 되었습니다.

재고 수량3

생산자가 제품D을(를) 생산했습니다.

창고에 제품D가 입고 되었습니다.

재고 수량4

생산자가 제품E을(를) 생산했습니다.

창고에 제품E가 입고 되었습니다.

재고 수량5

...중략...

생산자가 제품Z을(를) 생산했습니다.

소비자가 제품U을(를) 소비했습니다. 

창고에 제품Z가 입고 되었습니다.

재고 수량5

창고에서 제품V가 출고 되었습니다. 

재고 수량 : 4

소비자가 제품V을(를) 소비했습니다. 

창고에서 제품W가 출고 되었습니다. 

재고 수량 : 3

소비자가 제품W을(를) 소비했습니다. 

창고에서 제품X가 출고 되었습니다. 

재고 수량 : 2

소비자가 제품X을(를) 소비했습니다. 

창고에서 제품Y가 출고 되었습니다. 

재고 수량 : 1

소비자가 제품Y을(를) 소비했습니다. 

창고에서 제품Z가 출고 되었습니다. 

재고 수량 : 0

소비자가 제품Z을(를) 소비했습니다. 


'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
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함