자바 스레드 관련 소스 해석좀 부탁드립니다.
조회수 1086회
생산자-소비자 예제인데요 전체적으로 돌아가는 상황을 순서대로 좀 알려주세요!! empty true false 상태에 따라서요!!!
1.Buffer 소스
package lect12;
public class Buffer { private int data; private boolean empty = true; //empty=true:생산, empty=false:소비 public synchronized int get(){ while(empty){ try{ wait(); } catch(InterruptedException e){ e.printStackTrace(); } } empty = true; notifyAll(); return data; } public synchronized void put(int data){ while(!empty){ try{ wait(); }catch(InterruptedException e){ e.printStackTrace(); } } empty=false; this.data =data; notifyAll(); }
}
2.Producer 소스
public class Producer implements Runnable{ private Buffer buffer; public Producer(Buffer buffer){ this.buffer = buffer; } public void run(){ for(int i = 0; i < 10; i++){ buffer.put(i); System.out.println("생산자: "+i+" 번 케익을 생산하였습니다!!"); try{ Thread.sleep((int)(Math.random()*100)); } catch (InterruptedException e) { e.printStackTrace(); } } }
}
3.Consumer 소스
package lect12;
public class Consumer implements Runnable{ private Buffer buffer; public Consumer(Buffer drop){ this.buffer = drop; } public void run(){ for(int i = 0; i < 10; i++){ int data = buffer.get(); System.out.println("소비자: "+data+" 번 케익을 소비하였습니다~~"); try{ Thread.sleep((int)(Math.random()*100)); } catch (InterruptedException e) { e.printStackTrace(); } } }
}
4.ProducerConsumerTest 소스 (메인) package lect12;
public class ProducerConsumerTest { public static void main(String[] args){ Buffer buffer = new Buffer(); Thread producer = new Thread(new Producer(buffer)); producer.start(); Thread consumer = new Thread(new Consumer(buffer)); consumer.start(); }
}
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력