JAVA中定时器Timer的使用

来源:互联网 发布:三层网络拓扑结构 编辑:程序博客网 时间:2024/05/01 12:33
public static void main(String[] args) {        test1();    //2秒后执行        test2();    //2秒后循环执行     }    public static void test1(){        Timer timer  = new Timer();        timer.schedule(new TimerTask() {            @Override            public void run() {                System.out.println("1111111111111");            }        }, 2000);    }    public static void test2(){        Timer timer  = new Timer();        timer.schedule(new TimerTask() {            @Override            public void run() {                System.out.println("1111111111111");            }        },0,2000);    }

API里已经说的很明白了:
一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。

与每个 Timer 对象相对应的是单个后台线程,用于顺序地执行所有计时器任务。计时器任务应该迅速完成。如果完成某个计时器任务的时间太长,那么它会“独占”计时器的任务执行线程。因此,这就可能延迟后续任务的执行,而这些任务就可能“堆在一起”,并且在上述不友好的任务最终完成时才能够被快速连续地执行。

对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。默认情况下,任务执行线程并不作为守护线程 来运行,所以它能够阻止应用程序终止。如果调用者想要快速终止计时器的任务执行线程,那么调用者应该调用计时器的 cancel 方法。

如果意外终止了计时器的任务执行线程,例如调用了它的 stop 方法,那么所有以后对该计时器安排任务的尝试都将导致 IllegalStateException,就好像调用了计时器的 cancel 方法一样。

0 0
原创粉丝点击