2009-07-07 11 views
2

Java의 Executor는 ThreadPool 개념을 추상화하여 (이해할 수있는 한) 작업을 받아들이고 실행할 수 있습니다.ThreadPool은 폴링과 같은 Executor입니다.

폴링 개념과 비슷한 예외가 있습니다. 특정 큐 (BlockingQueue을 구현하지 않음)에서 항목을 지속적으로 폴링 (대기열에서 제외)하고 실행 한 다음 절전 모드로 종료해야합니다.

기성 추상화가 있습니까? 아니면 직접 작성해야합니까?

+0

제목 제안 : "사용자 정의 대기열을 j.u.c 실행 프로그램에 어떻게 통합 할 수 있습니까?" –

+0

나에게 제목은 괜찮다. 나는 네 제목을 이해했다. 그리고 그것에는 수수께끼가 있습니다. – flq

+0

음, 한가지 제안은 Quartz ffs를 사용하는 것입니다! 제목이 분명하다고는 생각하지 않습니다. 폴링은 몇 줄의 코드입니다 (아래 나의 답변 참조). 반면에 스레드 풀은 천이 될 수 있습니다. 왜 당신은 몇 가지 loc에 대한 추상화 레이어가 필요하겠습니까? –

답변

2

폴링이 용이하다 (더 나은 제목의 제안을 환영합니다) : 나는 당신이하려고하는 정확히 무엇인지 확실히 모르겠어요으로

Thread t = new Thread(new Runnable() { 
    public void run() { 
     try { 
      while (!t.isInterrupted()) { 
       Object item; 
       while ((item = queue.take()) == null) {//does not block 
        synchronized (lock) { lock.wait(1000L) } //spin on a lock 
       } 
       //item is not null 
       handle(item); 
      } 
     } catch (InterruptedException e) { } 
    } 
}); 
t.start(); 

은 아마 당신이 질문을 바꿔 필요 해야 할 것?

+0

내 대기열이 뭔가 맞춤 (GigaSpaces 대기열)이며 BlockingQueue 인터페이스를 구현하지 않습니다. – ripper234

+0

그런 다음 인터페이스를 구현하고 대기열에 위임하는 간단한 어댑터를 추가하십시오. –

+0

- GigaSpaces는 분산 그리드입니다 - 대기열에 대한 push() 작업은 다른 컴퓨터에서 수행됩니다. Ergo, 실제 폴링이 필요합니다. BlockingQueue를 구현하는 방법을 알지 못합니다. – ripper234