728x90
반응형

package com.dkitec.test.axis.basic;

import java.util.Vector;

public class Writer {

 public void fill(Vector queue){
  for(int i = 0; i < 20; i++){
   queue.add(new Integer(i));
   
   synchronized (queue) {
    queue.notifyAll();
   }
  }
 }
 public static void  main(String[] args){
  //Writer 와 Reader 간에 통신 채널이 된다.
  Vector queue = new Vector();
  Writer writer1 = new Writer();
  
  // 두 Reader 를 시작한다.
  Reader reader1 = new Reader(queue,"Reader 1 ");
  reader1.start();
  
  Reader reader2 = new Reader(queue,"Reader 2 ");
  reader2.start();
  
  // queue 를 채운다. 기다리던 reader는 깨어나서 큐를 비우기 시작할 것이다.
  writer1.fill(queue);
 }
}

 

 package com.dkitec.test.axis.basic;

import java.util.Vector;

public class Reader extends Thread {
 //Reader 와 Writer 간의 통신 채널이다.
 private Vector queue ;
 private String name ; // Reader 의 이름

 public Reader(Vector queue,String name) {
  this.queue = queue;
  this.name = name;
 }
 
 @Override
 public void run() {
  for(;;){
   synchronized (queue) { //모니터를 얻는다.
    while(queue.isEmpty()){
     try {
      queue.wait();  //모니터를 해제한다.
     } catch (InterruptedException e) {
      System.out.println("InterruptedException : " + e.getMessage());
     }
    }
    
    //모니터를 다시 얻는다.
    Object o = queue.remove(0);
    
    System.out.println(name+" got job number : " + o);
   } //동기화된 블럭의 끝에서는 모니터를 해제한다.
  }
 }
 
 
}

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,