你的位置:首页 > Java教程

[Java教程]Java实现定时任务的三种简单方法


第一种方法:

  /**   * 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时间则执行任务   */  @Test  public void test1() {    String taskTime = "13:43:10";    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");    while (true) {      Date date = new Date();      if (sdf.format(date).equals(taskTime)) {        System.out.println("任务开始执行!");        try {          // 这里让线程睡眠一秒钟的原因是:若任务在1秒内执行完的话,会导致任务执行多遍,          // 任务执行完睡眠一秒钟,保证任务不会重复执行          Thread.sleep(1000);        } catch (InterruptedException e) {          e.printStackTrace();        }      }    }  }

第二种方法:若想测试,请一定用main方法,Test不行

  /**   * 利用ScheduledExecutorService这个接口实现   */  public static void main(String[] args) {    Runnable runnable = new Runnable() {      @Override      public void run() {        System.out.println("任务开始执行!");      }    };    ScheduledExecutorService sch = Executors.newSingleThreadScheduledExecutor();    // 第一个参数是要执行的线程    // 第二个参数是初始延迟时间    // 第三个参数是任务执行的间隔时间    // 第四个参数是计时单位,可以是时分秒等    sch.scheduleAtFixedRate(runnable, 10, 2, TimeUnit.SECONDS);  }

第三种方法:若想测试,请一定用main方法,Test不行

public static void main(String[] args) {    TimerTask task = new TimerTask() {      @Override      public void run() {        System.out.println("任务开始执行!");      }    };    Calendar cal = Calendar.getInstance();    int year = cal.get(Calendar.YEAR);    int month = cal.get(Calendar.MONTH);    int day = cal.get(Calendar.DAY_OF_MONTH);    cal.set(year, month, day, 14, 1, 0);    Date date = cal.getTime();    Timer timer = new Timer();    timer.schedule(task, date, 2000);  }