본문 바로가기

코딩 내공 Project/IO&NIO 네트워크

생성자 - 소비자

  1. Queue : 큐의 공통 메소드를 정의한 인터페이스
  2. JobQueue : 인터페이스 Queue를 정의
  3. Consumer : 소비자
  4. Producer : 생상자
  5. Tester : 메인
  • interface를 사용하여 이것을 구현한 클래스들의 상위 클래스로서 이것을 구현한 하위 클래스들을 "형"에 제한받지않고 사용할수 있다.
  • 싱글톤 패턴 : Queue와 같이 하나만 필요한 경우 여러개 생성을 막기위해 쓰인다 
     //싱글톤 패턴 시작
     private static JobQueue instance = new JobQueue();
     private JobQueue(){}
     public static JobQueue getInstance(){
      if(instance == null){
       synchronized (JobQueue.class) {
        instance = new JobQueue();
       }
      }
      
      return instance;
     }
     //싱글톤 패턴 끝

  • Object monitor : synchronized 할때 감시자 역할 - wait(), notify()
    private static final Object monitor = new Object();


    public Object pop() throws InterruptedException, NoSuchElementException {
    // TODO Auto-generated method stub
    Object o = null;
    synchronized (monitor) {
    if(jobs.isEmpty()){
    monitor.wait();
    }
    o = jobs.removeFirst();
    }
    if(o == null) throw new NoSuchElementException();

    return o;
    }

    public void put(Object o) {
    // TODO Auto-generated method stub
    synchronized (monitor) {
    jobs.addLast(o);
    monitor.notify();
    }
    }

 

  • Runnable 에서 run() 메소드

 public void run() {
  // TODO Auto-generated method stub
  System.out.println("[start producer..]");
  try{
   int i=0;
   while(!Thread.currentThread().isInterrupted()){
    queue.put(Integer.toString(i++));
   }
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   System.out.println("[end producer..]");
  }
 }