JavaTM Platform
Standard Ed. 6

java.util
클래스 Timer

java.lang.Object 
  상위를 확장 java.util.Timer


public class Timer
extends Object

백그라운드 thread로 장래 실행되는 태스크를 스케줄 하는, thread를 위한 기능입니다. 태스크는, 1 회만, 또는 정기적으로 반복해 실행되도록(듯이) 스케줄 됩니다.

Timer 객체와 대응하는 것은, 타이머의 태스크를 모두 연속해 실행하기 위해서 사용되는, 단일의 백그라운드 thread입니다. 타이머 태스크는 신속히 실행될 필요가 있습니다. 타이머 태스크의 완료에 시간이 너무 걸리면(자), 타이머의 태스크 실행 thread가 「점유」됩니다. 이것에 의해 후속의 태스크의 실행이 늦어 위반한 태스크의 완료시 (완료했을 경우)에, 연달아 「정리하며」실행되게 됩니다.

Timer 객체의 마지막 라이브 참조가 종료해, 미처리의 태스크가 모두 실행되면(자), 타이머의 태스크 실행 thread도 동시에 완료해, 가베지 컬렉트됩니다. 다만, 이것에는 한없고 긴 시간이 걸리는 경우가 있습니다. 디폴트에서는, 태스크의 실행 thread는 「demon thread」로서는 실행되지 않기 때문에, 어플리케이션이 종료하지 않게 할 수 있습니다. 타이머의 태스크 실행 thread를 즉시 완료시키는 경우, 호출측은 타이머의 cancel 메소드를 호출할 필요가 있습니다.

stop 메소드의 호출등에 의해 타이머의 태스크 실행 thread가 예상외의 시간에 종료했을 경우, 타이머의 태스크를 스케줄 하려고 하면(자), 타이머의 cancel 메소드가 불려 갔을 경우와 같게,IllegalStateException 가 발생합니다.

이 클래스는 thread 세이프입니다. 외부의 동기화를 실시하지 않아도, 복수의 thread로 단일의 Timer 객체를 공유할 수 있습니다.

이 클래스에서는, 리얼타임은 보증되지 않습니다. Object.wait(long) 메소드를 사용해, 태스크가 스케줄 됩니다.

구현상의 주의:이 클래스는, 병행해 스케줄 된 다수의 태스크를 슬캘링 합니다 (수천에서도 문제는 없다). 태스크 큐를 나타내기 위해서(때문에) 바이너리 heap가 내부적으로 사용되기 (위해)때문에, 태스크를 스케줄 하는 코스트는 O(log n)가 됩니다. n 는, 병행해 스케줄 된 태스크의 수입니다.

구현상의 주의:모든 생성자 은 타이머 thread를 개시합니다.

도입된 버젼:
1.3
관련 항목:
TimerTask , Object.wait(long)

생성자 의 개요
Timer ()
          새로운 타이머를 작성합니다.
Timer (boolean isDaemon)
          demon로서 실행되도록(듯이) 지정할 수 있는 관련 thread를 가지는, 새로운 타이머가 작성됩니다.
Timer (String  name)
          지정된 이름의 관련하는 thread를 가지는 새로운 타이머가 작성됩니다.
Timer (String  name, boolean isDaemon)
          지정된 이름의 관련하는 thread를 가지는 새로운 타이머가 작성됩니다.
 
메소드의 개요
 void cancel ()
          현재 스케줄 되고 있는 태스크를 파기해, 이 타이머를 종료합니다.
 int purge ()
          삭제된 모든 태스크를, 이 타이머의 태스크 큐로부터 삭제합니다.
 void schedule (TimerTask  task, Date  time)
          지정한 시간으로 지정한 태스크가 실행되도록(듯이) 스케줄 합니다.
 void schedule (TimerTask  task, Date  firstTime, long period)
          지정한 태스크가, 지정한 시간에 개시되어 「고정 지연 실행」을 반복하도록(듯이) 스케줄 합니다.
 void schedule (TimerTask  task, long delay)
          지정한 지연의 후에, 지정한 태스크가 실행되도록(듯이) 스케줄 합니다.
 void schedule (TimerTask  task, long delay, long period)
          지정한 태스크가, 지정한 지연의 후에 개시되어 「고정 지연 실행」을 반복하도록(듯이) 스케줄 합니다.
 void scheduleAtFixedRate (TimerTask  task, Date  firstTime, long period)
          지정한 태스크가, 지정한 시간에 개시되어 「고정 빈도 실행」을 반복하도록(듯이) 스케줄 합니다.
 void scheduleAtFixedRate (TimerTask  task, long delay, long period)
          지정한 태스크가, 지정한 지연의 후에 개시되어 「고정 빈도 실행」을 반복하도록(듯이) 스케줄 합니다.
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

Timer

public Timer()
새로운 타이머를 작성합니다. 관련하는 thread는, demon로서는 실행되지 않습니다.

관련 항목:
Thread , cancel()

Timer

public Timer(boolean isDaemon)
demon로서 실행되도록(듯이) 지정할 수 있는 관련 thread를 가지는, 새로운 타이머가 작성됩니다. demon thread는, 타이머가 「보수 작업」의 반복을 스케줄 하기 위해서 사용되는 경우에 불려 갑니다. 이것은, 어플리케이션이 실행되고 있는 동안 실행될 필요가 있습니다만, 어플리케이션의 수명을 지연시킬 수 없습니다.

파라미터:
isDaemon - 관련하는 thread가 demon로서 실행되는 경우는 true
관련 항목:
Thread , cancel()

Timer

public Timer(String  name)
지정된 이름의 관련하는 thread를 가지는 새로운 타이머가 작성됩니다. 관련하는 thread는, demon로서는 실행되지 않습니다.

파라미터:
name - 관련하는 thread의 이름
예외:
NullPointerException - 이름이 null 의 경우
도입된 버젼:
1.5
관련 항목:
Thread.getName() , Thread.isDaemon()

Timer

public Timer(String  name,
             boolean isDaemon)
지정된 이름의 관련하는 thread를 가지는 새로운 타이머가 작성됩니다. 관련하는 thread는, demon로서의 실행이 지정되는 경우가 있습니다.

파라미터:
name - 관련하는 thread의 이름
isDaemon - 관련하는 thread가 demon로서 실행되는 경우는 true
예외:
NullPointerException - 이름이 null 의 경우
도입된 버젼:
1.5
관련 항목:
Thread.getName() , Thread.isDaemon()
메소드의 상세

schedule

public void schedule(TimerTask  task,
                     long delay)
지정한 지연의 후에, 지정한 태스크가 실행되도록(듯이) 스케줄 합니다.

파라미터:
task - 스케줄 되는 태스크
delay - 태스크가 실행되기 전의 밀리 세컨드 단위의 지연
예외:
IllegalArgumentException - delay 가 부의 경우, 또는 delay + System.currentTimeMillis() 가 부의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 또는 타이머가 삭제되었을 경우

schedule

public void schedule(TimerTask  task,
                     Date  time)
지정한 시간으로 지정한 태스크가 실행되도록(듯이) 스케줄 합니다. 과거의 시간을 지정하면(자), 태스크는 즉시 실행되도록(듯이) 스케줄 됩니다.

파라미터:
task - 스케줄 되는 태스크
time - 태스크가 실행되는 시간
예외:
IllegalArgumentException - time.getTime() 가 0 보다 작은 값의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 thread가 종료했을 경우

schedule

public void schedule(TimerTask  task,
                     long delay,
                     long period)
지정한 태스크가, 지정한 지연의 후에 개시되어 「고정 지연 실행」을 반복하도록(듯이) 스케줄 합니다. 그 후는, 지정한 기간과는 별도로, 거의 일정한 간격으로 실행됩니다.

고정 지연 실행에서는, 전의 실행의 실제의 실행 시간을 기준으로 해 각각의 실행이 스케줄 됩니다. 어떠한 이유로써 실행이 지연 했을 경우 (가베지 컬렉션, 그 외의 백그라운드 작업 등), 그 후의 실행도 지연 됩니다. 최종적으로, 실행의 빈도는 일반적으로, 지정한 기간의 대응하는 빈도보다 약간 늦어집니다 (기본이 되는 Object.wait(long) 를 지지하고 있는 시스템 클록이 정확이라고 하는 전제로).

고정 지연 실행은, 「원활함」을 필요로 하는 작업의 반복에 적절하고 있습니다. 즉, 장시간의 실행보다 단시간의 실행으로 빈도의 정확함을 유지할 필요가 있는 작업에 적절하고 있습니다. 이것에는, 일정한 간격으로 커서를 점멸시키는 등, 대부분의 애니메이션 태스크가 포함됩니다. 또, 키가 밀리고 있는 동안은 문자를 자동적으로 반복하는 등, 사용자의 입력에 응해 일정한 활동이 실행되는 태스크도 포함됩니다.

파라미터:
task - 스케줄 되는 태스크
delay - 태스크가 실행되기 전의 밀리 세컨드 단위의 지연
period - 연속하는 태스크 실행의 밀리 세컨드 단위의 시간
예외:
IllegalArgumentException - delay 가 부의 경우, 또는 delay + System.currentTimeMillis() 가 부의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 thread가 종료했을 경우

schedule

public void schedule(TimerTask  task,
                     Date  firstTime,
                     long period)
지정한 태스크가, 지정한 시간에 개시되어 「고정 지연 실행」을 반복하도록(듯이) 스케줄 합니다. 그 후는, 지정한 기간과는 별도로, 거의 일정한 간격으로 실행됩니다.

고정 지연 실행에서는, 전의 실행의 실제의 실행 시간을 기준으로 해 각각의 실행이 스케줄 됩니다. 어떠한 이유로써 실행이 지연 했을 경우 (가베지 컬렉션, 그 외의 백그라운드 작업 등), 그 후의 실행도 지연 됩니다. 최종적으로, 실행의 빈도는 일반적으로, 지정한 기간의 대응하는 빈도보다 약간 늦어집니다 (기본이 되는 Object.wait(long) 를 지지하고 있는 시스템 클록이 정확이라고 하는 전제로).

고정 지연 실행은, 「원활함」을 필요로 하는 작업의 반복에 적절하고 있습니다. 즉, 장시간의 실행보다 단시간의 실행으로 빈도의 정확함을 유지할 필요가 있는 작업에 적절하고 있습니다. 이것에는, 일정한 간격으로 커서를 점멸시키는 등, 대부분의 애니메이션 태스크가 포함됩니다. 또, 키가 밀리고 있는 동안은 문자를 자동적으로 반복하는 등, 사용자의 입력에 응해 일정한 활동이 실행되는 태스크도 포함됩니다.

파라미터:
task - 스케줄 되는 태스크
firstTime - 태스크가 실행되는 최초의 시간
period - 연속하는 태스크 실행의 밀리 세컨드 단위의 시간
예외:
IllegalArgumentException - time.getTime() 가 0 보다 작은 값의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 thread가 종료했을 경우

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask  task,
                                long delay,
                                long period)
지정한 태스크가, 지정한 지연의 후에 개시되어 「고정 빈도 실행」을 반복하도록(듯이) 스케줄 합니다. 그 후는, 지정한 기간과는 별도로, 거의 일정한 간격으로 실행됩니다.

고정 빈도 실행에서는, 최초의 실행의 스케줄 된 실행 시간을 기준으로 해 각각의 실행이 스케줄 됩니다. 어떠한 이유로써 실행이 지연 했을 경우 (가베지 컬렉션 또는 그 외의 백그라운드 작업 등), 「지연을 되찾는다」위해(때문에) 2 개(살) 이상의 실행이 연속해 행해집니다. 최종적으로 실행의 빈도는, 지정한 기간의 대응하는 빈도와 같게 됩니다 (기본이 되는 Object.wait(long) 를 지지하고 있는 시스템 클록이 정확이라고 하는 전제로).

고정 빈도 실행은, 1 시간 마다에 차임을 울리거나 특정의 시간에 매일 스케줄 된 보수를 실행하는 등, 「절대」시간을 반영하는 작업을 반복하는데 적합합니다. 또, 10 초 마다 새겨지는 카운트다운 타이머 등, 정해진 수의 실행의 합계 시간이 중요한 작업을 반복하는데도 적합합니다. 게다가 고정 빈도 실행은, 서로 동기화를 보관 유지할 필요가 있는 복수의 반복 타이머 태스크를 스케줄 하는데도 적합합니다.

파라미터:
task - 스케줄 되는 태스크
delay - 태스크가 실행되기 전의 밀리 세컨드 단위의 지연
period - 연속하는 태스크 실행의 밀리 세컨드 단위의 시간
예외:
IllegalArgumentException - delay 가 부의 경우, 또는 delay + System.currentTimeMillis() 가 부의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 thread가 종료했을 경우

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask  task,
                                Date  firstTime,
                                long period)
지정한 태스크가, 지정한 시간에 개시되어 「고정 빈도 실행」을 반복하도록(듯이) 스케줄 합니다. 그 후는, 지정한 기간과는 별도로, 거의 일정한 간격으로 실행됩니다.

고정 빈도 실행에서는, 최초의 실행의 스케줄 된 실행 시간을 기준으로 해 각각의 실행이 스케줄 됩니다. 어떠한 이유로써 실행이 지연 했을 경우 (가베지 컬렉션 또는 그 외의 백그라운드 작업 등), 「지연을 되찾는다」위해(때문에) 2 개(살) 이상의 실행이 연속해 행해집니다. 최종적으로 실행의 빈도는, 지정한 기간의 대응하는 빈도와 같게 됩니다 (기본이 되는 Object.wait(long) 를 지지하고 있는 시스템 클록이 정확이라고 하는 전제로).

고정 빈도 실행은, 1 시간 마다에 차임을 울리거나 특정의 시간에 매일 스케줄 된 보수를 실행하는 등, 「절대」시간을 반영하는 작업을 반복하는데 적합합니다. 또, 10 초 마다 새겨지는 카운트다운 타이머 등, 정해진 수의 실행의 합계 시간이 중요한 작업을 반복하는데도 적합합니다. 게다가 고정 빈도 실행은, 서로 동기화를 보관 유지할 필요가 있는 복수의 반복 타이머 태스크를 스케줄 하는데도 적합합니다.

파라미터:
task - 스케줄 되는 태스크
firstTime - 태스크가 실행되는 최초의 시간
period - 연속하는 태스크 실행의 밀리 세컨드 단위의 시간
예외:
IllegalArgumentException - time.getTime() 가 0 보다 작은 값의 경우
IllegalStateException - 태스크가 벌써 스케줄 되었는지 삭제되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 thread가 종료했을 경우

cancel

public void cancel()
현재 스케줄 되고 있는 태스크를 파기해, 이 타이머를 종료합니다. 현재 실행중의 태스크 (있는 경우)에는 간섭하지 않습니다. 타이머가 종료하면(자), 실행 thread도 동시에 종료해, 태스크는 스케줄 되지 않게 됩니다.

이 타이머에 의해 불려 간 타이머 태스크의 실행 메소드로부터 이 메소드를 호출하면(자), 진행중의 태스크 실행은, 이 타이머에 실행되는 마지막 태스크 실행이 됩니다.

이 메소드는, 반복해 불려 갑니다. 2 번째 이후의 호출에는, 효과는 없습니다.


purge

public int purge()
삭제된 모든 태스크를, 이 타이머의 태스크 큐로부터 삭제합니다. 이 메소드를 호출해도 타이머의 동작은 영향을 받지 않습니다만, 삭제된 태스크에의 참조를 큐로부터 배제합니다. 이러한 태스크에의 외부 참조가 존재하지 않는 경우, 태스크는 가베지 컬렉션의 대상이 됩니다.

대부분의 프로그램은, 이 메소드를 호출할 필요는 없습니다. 이것은, 다수의 태스크를 취소하는, 보기 드문 어플리케이션용으로서 설계되고 있습니다. 이 메소드를 호출하면(자), 처리 시간부터 메모리 효율이 우선되기 (위해)때문에, 메소드의 런타임이 n + c log n 에 비례하는 경우가 있습니다. 여기서, n 는 큐내의 태스크의 수, c 는 삭제된 태스크의 수를 나타냅니다.

이 타이머에 스케줄 된 태스크내로부터, 이 메소드를 호출할 수가 있습니다.

반환값:
큐로부터 삭제된 태스크의 수
도입된 버젼:
1.5

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.