2012-05-26 1 views
-1

Java SchedulerThreadPoolExecutor을 사용하는 데있어 매우 익숙합니다. 시간 t에서새 작업을 수행하기 전에 모든 작업이 완료 될 때까지 차단 된 스케줄러 구현

  1. 이, 스케줄러 그들을 처리하고 처리되지 않은 모든 작업에 걸릴 것입니다 : 나는 시나리오와 일치하는 스케줄러를 구현하는 방법이 있는지 묻고 싶다.

  2. 시간 t + 1에 새로운 태스크가 있지만 스케줄러는 시간 t의 모든 태스크가 완료되지 않았기 때문에 스케줄러가 가져올 수 없습니다. 시간 t에서의 작업 중 일부가 처리를 완료하더라도, 스케줄러는 모든 작업이 완전히 처리 될 때까지 시간 t + 1에서 새로운 작업을 취할 수 없습니다. 이 경우 스케줄러는 시간 t + 1에서 작업을 차단합니다. 모든 작업 t + 1이 완전히 처리 될 때까지 스케줄러는 t + 1에서 새로운 작업을 수행합니다.

+0

2 번에서 말하는 내용이 완전히 명확하지는 않습니다. 다시 읽으면서 이상한 이유를 확인하고 자신의 말을 바꾸는 것이 좋습니다. – ArjunShankar

+1

또한 't'와 't + 1'과 같은 용어를 사용합니다. 당신이 비교적 크지 만 별개의 덩어리 (시계 틱과 같은)로 시간을보고있는 것처럼 나에게 들립니다. 't + 1 '의'1'은 당신에게 무엇을 의미합니까? – ArjunShankar

답변

0

작업이 기간 경계를 넘지 않는 작업 처리 기간을 정의하려는 것 같습니다. 두 질문/힌트 :

  • SchedulerThreadPoolExecutor를 사용해야합니까? 어쨌든 태스크 기간 요구 사항과 충돌 할 가능성이있는 타이머와 같은 기능을 사용하려는 경우가 아니면 간단한 ThreadPoolExecutor으로 충분합니다.

  • 코드 구조를 변경하여 invokeAll()을 사용 했습니까?

+0

나는 타이머와 같은 기능을 사용할 의사가있다. 나는 특정 시간에 스케줄러를 시작할 것인가를 생각하고 있는데, 오전 3시, 모든 간격마다 1 분 정도의 작업을 시작합니다. 이런 식으로 할 수 있는지 확실하지 않습니다. config 파일을 사용하여 스케줄러를 실행할 간격과 간격을 구성 할 수 있습니다. invokeAll 사용을 고려하지 않았습니다. 어떻게 도움이됩니까? – ktlim

+0

@ktlim :'invokeAll()'은 모든 제공된 작업을 시작한 다음 완료 될 때까지 대기합니다. 모든 작업이 완료 될 때까지 제출자 스레드를 차단하여 결정 성을 허용합니다 ... – thkala

+0

@ktlim : 그러나 필요한 것은 간단한 작업 스케줄러보다 복잡합니다. 스케쥴러 클래스에서 수행하는 것이 아니라 실제 문제를 설명하는 것이 가장 좋습니다. 예를 들어, 다음 간격이 도래하고 일부 작업이 아직 완료되지 않은 경우 어떻게됩니까? – thkala

관련 문제