this 포럼 토론에서 시간 제한을두고 정기적 인 백그라운드 작업을 실행하는 Java ScheduledExecutorService를 중지하는 방법을 발견했습니다.조건에 따라 Java ScheduledExecutorService를 종료하는 방법은 무엇입니까?
필자의 경우 특정 조건이 참일 경우 ScheduledExecutorService를 중지해야합니다. 예를 들어, 카운트가 5를 초과하면 "삐 소리 (beep) {count}"인쇄를 중단하고 싶습니다. 이전에 강조 표시된 예제를이 용도로 사용했습니다. 여기
public class BeeperControl {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private int count;
public void beep() {
final Runnable beeper = new Runnable() {
public void run() {
count = count + 1;
System.out.println("beep " + count);
if (count == 5) {
scheduler.shutdown();
}
}
};
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
beeper, 1, 1, SECONDS);
}
public static void main(String[] args) {
BeeperControl bc = new BeeperControl();
bc.beep();
}
}
는 I 카운트 5 같으면 체크 한 후 셧다운 ScheduledExecutorService를 행 scheduler.shutdown()
방법을 사용하고있다.
제 질문은 이것이 주어진 시나리오 (예 : ScheduledExecutorService가 실행중인 작업에 의해 종료 됨)에 적합한 지 여부입니다. 그런 시나리오에서 사용할 수있는 더 나은 대안이 있습니까? 그것은 읽기 증가 쓰기 (count = count + 1
) 등 count
변수에 오래된 값을 초래할 수 있으므로 다중 스레드 환경에서 변경 가능한 상태 (count
변수)를 사용하여