java.util.Timer 클래스에서 예약 된 작업을 중지하는 방법


92

나는 java.util.Timer클래스를 사용하고 있고 일정 방법을 사용하여 일부 작업을 수행하고 있지만 6 번 실행 한 후 작업을 중지해야합니다.

어떻게해야합니까?

답변:


141

어딘가에 타이머에 대한 참조를 유지하고 다음을 사용하십시오.

timer.cancel();
timer.purge();

뭘 하던지 막으려 고요 이 코드를 수행중인 작업에 삽입하여 수행 한 static int횟수를 계산할 수 있습니다. 예 :

private static int count = 0;
public static void run() {
     count++;
     if (count >= 6) {
         timer.cancel();
         timer.purge();
         return;
     }

     ... perform task here ....

}

10
취소하면 충분하다고 생각합니다. 제거 할 필요가 없습니다.
LiangWang

1
그것은 좋은 (Effetive 자바 책)에 최종있어서의 timer.cancel ()를 추가하는 것입니다
Tushar 펜디 교수

1
@Jacky는 둘 다 갖는 것이 좋지만 이론적으로는 cancel그 자체로 작동합니다.
Fritz H

10
@Jacky가 맞습니다. Timer 구현을 살펴보십시오. 취소 후 퍼지를 호출하는 것은 절대적으로 쓸모가 없습니다. 취소는 전체 작업 목록을 지우고 제거는 동일한 목록을 반복하면서 상태가 CANCELED인지 확인한 다음 작업을 제거합니다.
Boyan

2
타이머를 시작한 활동 / 조각이 파괴되거나 중지되면 타이머 예약이 자체적으로 중지됩니까?
모든


28

타이머에 예약 한 작업을 중지해야합니다. 타이머 :

Timer t = new Timer();
TimerTask tt = new TimerTask() {
    @Override
    public void run() {
        //do something
    };
}
t.schedule(tt,1000,1000);

중지하려면 :

tt.cancel();
t.cancel(); //In order to gracefully terminate the timer thread

타이머를 취소하는 것만으로는 진행중인 타이머 작업이 종료되지 않습니다.


두 가지 방법이 있는데 다른 방법에서 TimerTask를 중지 할 수 있습니까?
Sachin HR

16
timer.cancel();  //Terminates this timer,discarding any currently scheduled tasks.

timer.purge();   // Removes all cancelled tasks from this timer's task queue.

1

밀리 초 단위의 특정 시간에 깨어 난 후 타이머를 한 번 종료합니다.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.