0

나는의 ActiveMQ에서 데이터를 가져올하고있는 ThreadPoolExecutor에서 실행 집행에 전달해야합니다. 문제는ActiveMQ를하고있는 ThreadPoolExecutor가 작동 함께

, 나는이 작업에 걸릴 유휴 준비 앉아 수영장에서 적어도 하나 개의 스레드가 될 때까지 큐에서 다음 데이터를 가져올 필요가 없습니다.

내가 할 수있는 단지 바쁜 대기 경우 activeCount < poolSize까지. 하지만이 비동기 처리와 함께 모든 솔루션을 주셔서 감사하겠습니다. 미리 감사드립니다.

+0

을 시도 할 수 있습니다. 나에게 당신이 단순히 메시지 처리기를 execute() 태스크를 갖기를 원하는 것처럼 들리면 아무 것도 걱정할 필요가 없다. 집행자가 자유롭게 일하게되면, TPE에 의해 필요하다면 작업이 대기하게 될 것입니다. 메시지를 사용할 수있을 때까지 기다릴 필요없이 메시지 큐에서 실행 프로그램 큐로 밀어 넣기 만하면됩니다. – Gimby

+0

@Gimby, 당신은 맞다, 그러나 이것은 실행을위한 보장 된 공간이있을 때까지 나는 영구의 ActiveMQ에서 데이터를 가져올 수없는 요구 사항입니다. –

+0

메시지가 소비되고 작업이 실행될 때까지 지연이 없어야합니까? 그것의 뒤에 추론을 상상하기가 약간 어렵고, 적절한 추론없이 가능한 해결책이 무엇인지 파악하기가 어렵습니다. 대기열로 설계된 ThreadPoolExecutor를 사용하지 않는 느낌이 들었습니다. – Gimby

답변

0

당신은 내가 조금 혼란 스러워요이

final ThreadPoolExecutor executor=... 
new Thread(new Runnable(){ 
public void run(){ 
    while(true){ 
     if(executor.getActiveCount()<executor.getCorePoolSize()) 
      executor.execute(mq.get()); 
     } 
}).start(); 
+0

이것은 마지막 줄에서 언급 한 바 있습니다. 이것은 바쁜 대기 접근 방식이지만, 실행 프로그램 풀 가용성을 지속적으로 확인하지 않는 접근법을 찾고 있습니다. –

관련 문제