- Queue : 큐의 공통 메소드를 정의한 인터페이스
- JobQueue : 인터페이스 Queue를 정의
- Consumer : 소비자
- Producer : 생상자
- 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..]"); } } |
'코딩 내공 Project > IO&NIO 네트워크' 카테고리의 다른 글
[NIO] 셀렉터 부분 정리 (0) | 2011.05.08 |
---|---|
[NIO] Chanel 부분 정리 (0) | 2011.05.07 |
[NIO] Buffer 부분 정리 (0) | 2011.05.05 |
[참고] ByteBufferPool과 ThreadPool을 추가해 성능 업그레이드하기 (0) | 2011.03.16 |
[링크] NIO API 1부 - 버퍼와 채널 (0) | 2011.03.07 |