Java多线程学习(五)

    在JDK库中,Timer类主要负责计划任务的功能,即在指定的时间开始执行某一个任务。Timer类负责设置任务计划,TimerTask类负责封装任务,执行任务的代码要放到TimerTask的子类中。

  1. 方法schedule(TimerTask task,Date time)的使用

    ①在指定的日期执行一次某一任务

    public class MyTask extends TimerTask {
          public void run() {
             System.out.println("运行了,在"+ new Date());
         }
     }
    public class Run {
       private static Timer timer = new Timer();
       
       public static void main(String [] args) {
           MyTask myTask = new MyTask();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           String time = "2016-03-06 20:00:00";
           Date date = sdf.parse(time);
           
           timer.schedule(task, date);
       }
    }

    但是注意,在执行完计划任务之后,进程仍一直处于运行状态。因为创建一个Timer对象就是启动一个新的线程,而且这个新的线程并不是守护线程,他会一直运行。

    ②下面将以上的任务改为守护线程,执行完任务后就销毁。

    public class MyTask extends TimerTask {
          public void run() {
             System.out.println("运行了,在"+ new Date());
         }
     }
    public class Run {
       private static Timer timer = new Timer(true);
       
       public static void main(String [] args) {
           MyTask myTask = new MyTask();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           String time = "2016-03-06 20:00:00";
           Date date = sdf.parse(time);
           
           timer.schedule(task, date);
       }
    }

    ③如果计划时间早于当前时间,则会立即执行任务

    ④Timer中允许有多个TimerTask任务。TimerTask是以队列的方式一个一个被顺序执行的,所以执行时间可能与预期有差距。

  2. 方法schedule(TimerTask task, Date fistTime, long period)的使用

    在指定的日期后,按指定的间隔周期的无限循环执行某一任务。

    TimerTask类的cancel()方法用于将自身从重复执行队列中清除。而Timer中cancel()方法用于将任务队列中的全部任务都清除。

你可能感兴趣的:(Java多线程学习(五))