2012-08-06 2 views
1

ScheduledExecutorService에는 무료 스레드를 얻을 수없는 경우 정기적 인 작업이 지연되어 발생하는 문제가있는 것으로 보입니다. 불행히도 저에게 주기적으로 할당 된주기적인 작업은 실제로 일정대로 이루어져야합니다. 현재는 1 분에 한 번 예정되어 있지만 때로는 응용 프로그램이 다른 작업으로 인해 혼잡하기 때문에 (5 분 안에 실패하고 5 분이 지나면 "주요 프로덕션 버그"임계 값이됩니다).Java 응용 프로그램 내에서 정기적 인 작업을 정기적으로 실행합니다.

스레드 밸런서의 우선 순위를 지정하거나 다른 방법으로 제어하려면 어떻게해야합니까?

+0

다른 어떤하지만 사용하여 ScheduledExecutorService를인가를 태스크? 귀하의 작업은 항상 1 분 이내에 실행됩니까? – assylias

+0

정보가 충분하지 않습니다. 실제로 스레드를 어떻게 예약하고 있습니까? 몇 가지 코드를 보여주십시오. –

+0

@assylias - Bingo. 이 작업 중에는 매우 오랜 시간이 걸리는 작업이 있으며, 동시성 코딩 문제를 피할 수 있도록 하나의 스레드 만 사용하도록 프로그래밍했습니다. 별도의 Executor 서비스로 이동하여 해결할 수 있습니다. 이 글을 답으로 게시 할 수 있으며, 질문 할 정확한 두 가지 질문 이었기 때문에 받아 들일 것입니다. – djechlin

답변

2

ScheduledExecutorService를 다른 작업에 사용하거나 작업을 실행하는 데 1 분 이상 걸리는 경우 ScheduledExecutorService에서 사용 가능한 스레드 수를 단순히 늘릴 수 있습니다. 따라서 하나의 태스크가 실행을 완료하지 못하면 실행 프로그램은 계속 새 태스크를 실행할 수 있습니다.

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10); 

는 (I 무작위로 10을 집어 - 당신은 매 순간 당신의 작업을 실행하고 최대 5 분 동안 작동 할 수 있다면, 그것은 당신에게 오류에 대한 몇 가지 한계 잎)

관련 문제