Timer和TimerTask定时器使用

Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。具体的任务在TimerTask中run接口中实现。
通过Timer中的schedule方法启动定时任务。

一、运行定时器
启动一个定时器实质是启动一个线程
1、在指定日期运行定时器任务,只运行一次

public static void main(String[] args) throws ParseException {
    String sdate = "2018-02-14";
    SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");
    Date date = sf.parse(sdate);

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

    @Override
        public void run() {
            System.out.println("系统正在运行……");
        }
    }, date); //在指定的日期运行一次定时任务
/*如果date日期在今天之前,则启动定时器后,立即运行一次定时任务run方法*/
/*如果date日期在今天之后,则启动定时器后,会在指定的将来日期运行一次任务run方法*/
}                        

2、在距当前时刻的一段时间后运行定时器任务,只运行一次

public static void main(String[] args) {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            System.out.println("系统正在运行……");
        }
    }, 5000); //指定启动定时器5s之后运行定时器任务run方法,并且只运行一次
}    

3、在指定的时间后,每隔指定的时间,重复运行定时器任务

 1 public static void main(String[] args) throws ParseException {
 2     String sdate = "2018-02-10";
 3     SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd");
 4     Date date = sf.parse(sdate);
 5
 6     Timer timer = new Timer();
 7     timer.schedule(new TimerTask() {
 8
 9         @Override
10         public void run() {
11             System.out.println("系统正在运行……");
12         }
13     }, date, 2000);
14 /*如果指定的date时间是当天或者今天之前,启动定时器后会立即每隔2s运行一次定时器任务*/
15 /*如果指定的date时间是未来的某天,启动定时器后会在未来的那天开始,每隔2s执行一次定时器任务*/
16 }    

4、在距当前时刻的一段指定距离后,每隔指定时间运行一次定时器任务

public static void main(String[] args) {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            System.out.println("系统正在运行……");
        }
    }, 5000, 2000);
/*当启动定时器后,5s之后开始每隔2s执行一次定时器任务*/
}

二、停止定时器
停止定时器实质是终止Timer的线程。默认情况下,创建的Timer线程会一直执行,如果要停止的话主要有以下四种方法终止Timer线程:

调用Timer的cancel方法;
把Timer线程设置成Daemon守护线程,当所有的用户线程结束后,那么守护线程也会被终止;
当所有的任务执行结束后,删除对应Timer对象的引用,线程也会被终止;
调用System.exit方法终止程序

举例用cancel方法终止Timer线程

public static void main(String[] args) throws InterruptedException {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            System.out.println("系统正在运行……");
            // timer.cancel(); //可以在任何时刻调用cancel方法终止timer线程
        }
    }, 5000, 2000);

    /*如果主线程不休眠一段时间,就执行了cancel方法,那么定时器还没来得及执行就会被关闭*/
    Thread.sleep(6000);
    timer.cancel();
}

三、启动任务schedule 与 scheduleAtFixedRate的区别
1、schedule

public static void main(String[] args) throws ParseException {
        SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
        Date date = sf.parse("2018-02-12 18:33:00");

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {

            @Override
            public void run() {
                System.out.println(new Date() + "系统正在运行……");
            }
        }, date, 10 * 1000);

    }

2、scheduleAtFixedRate

 1 public static void main(String[] args) throws ParseException {
 2         SimpleDateFormat sf = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
 3         Date date = sf.parse("2018-02-12 18:39:00");
 4
 5         Timer timer = new Timer();
 6         timer.scheduleAtFixedRate(new TimerTask() {
 7
 8             @Override
 9             public void run() {
10                 System.out.println(new Date() + "系统正在运行……");
11             }
12         }, date, 10 * 1000);
13     }

原文地址:https://www.cnblogs.com/carsonwuu/p/10405802.html

时间: 2024-10-22 07:52:00

Timer和TimerTask定时器使用的相关文章

JDK中的Timer和TimerTask详解

目录结构: Timer和TimerTask 一个Timer调度的例子 如何终止Timer线程 关于cancle方式终止线程 反复执行一个任务 schedule VS. scheduleAtFixedRate 一些注意点 1. Timer和TimerTask Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务. 2.

Java线程:Timer和TimerTask

Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口. Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask.TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力. 一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,

多线程之Timer和TimerTask

Timer是一种线程设施,用于安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask.TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力. 测试代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 import java.util.TimerTask;   public class OneTask extends TimerTask{       private int id;

Timer和TimerTask

最近遇到了一下Timer和TimerTask.以前没有认真看,这次正好有空就看看.略记如下. 先看下简单的例子: public class TestTimer { private static final int MAX_COUNT = 10; private static volatile int count = 0; public static void main(String[] args) { Timer t = new Timer(); //t.schedule(new ETimer(

【Java】利用Timer与TimerTask定时执行任务

在Java里面定时执行一条任务多用于线程与进程配合Thread.currentThread().sleep(XXX);来实现,但是一些小型的任务其实完全利用Timer与TimerTask定时执行,Timer与TimerTask组合跟Thread与Runnable的区别在于,Timer与TimerTask是纯粹的单线程定时执行任务的计时器,相当于Thread与Runnable配合Thread.currentThread().sleep(XXX);的特殊情况,但程序写法定时器没有线程那么复杂.Thr

java定时任务类Timer和TimerTask用法详解

原文:java定时任务类Timer和TimerTask用法详解 代码下载地址:http://www.zuidaima.com/share/1550463277550592.htm package com.zuidaima.util; import java.io.IOException; import java.util.Timer; import test.MyTask; /* * 本类给出了使用Timer和TimerTaske的主要方法,其中包括定制任务,添加任务 * 退出任务,退出定时器.

Android Timer与TimerTask

一.概览 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次.    TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. 二.Timer与TimerTask的相关操作 通过Timer与TimerTask相结合实现的定时器功能.具体实现过程如下: 第一步,得到Timer的实例化对象 Timer timer= new Timer() ; 第二步,实例化TimerTask对象 TimerTask timerTask = new 

定时任务:Java中Timer和TimerTask的使用

java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks. 一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建. 一个完整的Timer: Java代码   java.util.Timer timer = new java.util.Timer(true); // true 说明这个timer以daemon方式运行(优先级低, // 程序结束timer也自动结束),注意,java

java Timer和TimerTask(简单的使用)

Timer 是一个定时工具 TimerTask 是一个实现了Runnable接口抽象类,代表可以被Timer执行的任务 (1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务. (2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行. (3)Timer.schedule(TimerTask task,long del