0
20 초마다 실행되는 작업이 있습니다. 그러나 문제는 작업이 지연되어 중단이 발생할 수 있다는 것입니다.예약 된 스레드가 작업을 완료했는지 확인하는 방법은 무엇입니까?
package client;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import static java.util.concurrent.TimeUnit.*;
import java.util.Date;
public class Bootstrap
{
public static void main(String[] args)
{
addThreadsToPool();
ServiceTest service1 = new ServiceTest();
}
public static void addThreadsToPool()
{
ScheduledThreadPoolExecutor eventPool = new ScheduledThreadPoolExecutor(5);
eventPool.scheduleAtFixedRate(new Updater(), 2, 20, SECONDS);
try {
Thread.sleep(20000);
} catch (InterruptedException ignored) {
}
}
}
이 예에서는 클래스 업데이터가 매 20 초마다 실행되지만 업데이터의 실행 시간이 20 초를 초과하면 문제가 발생합니다. Updater가 다음 예약 된 실행 전에 ites 작업을 완료하도록 만드는 방법은 무엇입니까?
'Updater'이 완료되지 않은 경우 _cancel_ Updater을 사용하려면'scheduleAtFixedRate'에 의해 반환 된'Future'를 사용하고'Updater'를 취소에 민감하게 만듭니다 (중단 된 상태에주의를 기울임으로써). 현재 스레드). –
업데이터가 작업을 완료하지 못하면 업데이터를 취소하고 시간을 요소에 곱하여이 작업을 실행하는 데 더 많은 시간을 할당하면 미래 부분에 대해 더 자세히 설명하겠습니까? –
2 개의 Updater 작업이 동시에 실행되지 않도록 하시겠습니까? – Gray