문제

설명

작업 A가 실행 중이며 2S에서 60+S까지 지속될 수 있습니다.

A가 실행되는 동안, 나는 10 초 (지연) 이후에 ExecutorService를 예약하여 5 초 (고정 요율)마다 "실행"을 인쇄 할 것입니다.

ScheduledExecutorService scheduleNotifications = Executors
        .newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

A가 완료되면 "A가 완료되었습니다"라는 인쇄를 원합니다. 그러나 ScheduleDexecutorService 작업이 시작된 경우에만, 적어도 한 번은 "실행"을 인쇄한다는 것을 의미합니다.

  • 10 대 이전에 완료되면 아무것도 인쇄하지 않습니다.
  • A가 10 초 이상이되면 5 초마다 "실행"을 인쇄 한 다음 A가 완료되면 "완료"합니다.

Schduled 내부에 부울 깃발을 사용하지 않고 어떻게 할 수 있습니까? runnable. 내 서비스가 시작되었는지 확인하는 방법이 있습니까?

도움이 되었습니까?

해결책

ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
    System.out.println("A is done.");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top