자바 스레드 관련 소스 해석좀 부탁드립니다.

조회수 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(); }

}

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)