JDK源码阅读(十一):java定时任务,Timer和ScheduleThreadPoolExecutor

本文深入探讨JDK中的定时任务实现,包括Timer和ScheduledThreadPoolExecutor。Timer简单易用,但任务串行执行,而ScheduledThreadPoolExecutor基于线程池,任务并发执行。文中还分析了两者的核心设计、优缺点以及schedule系列方法的工作原理,并讨论了如何通过Calendar实现复杂任务调度。
摘要由CSDN通过智能技术生成


任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。

四种任务调度的 Java 实现:

  • Timer
  • ScheduledExecutor
  • spring提供的定时任务
  • 开源工具包 Quartz

开源工具包和Spring提供的定时任务实现在后面的章节介绍,本文主要介绍JDK中提供的定时任务的实现,此外,为结合实现复杂的任务调度,本文还将介绍 Calendar 的一些使用方法。

Timer

java.util.Timer 是最简单的一种实现任务调度的方法,下面给出一个具体的例子

package huyp.task.timer;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 任务实现类
 * */
public class TimerTest extends TimerTask{
   

  private String jobName="";
  
  private static String format = "yyyy-MM-dd HH:mm:ss";
  static DateFormat dateFormat = new SimpleDateFormat(format);
  
  public TimerTest(String jobName) {
   
    super();
    this.jobName=jobName;
  }
  
  @Override
  public void run() {
   
    System.out.println("now time"+dateFormat.format(new Date())+" execute "+jobName);
    System.out.println("当前线程"+Thread.currentThread().getName());
    try {
   
      Thread.sleep(2000);
    } catch (InterruptedException e) {
   
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
   
    Timer timer=new Timer();
    long delay1=1*1000;
    long period1=1000;
    System.out.println("now time"+dateFormat.format(new Date()));
    //从现在开始1s之后,每隔1s执行一次job1
    timer.schedule(new TimerTest("job1"), delay1,period1);
    
    long delay2=2*1000;
    long period2=2000;
    //从现在开始2s之后,每隔2s执行一次job2
    System.out.println("now time"+dateFormat.format(new Date()));
    timer.schedule(new Timer2Test("job2"), delay2,period2);
    
  }
}
package huyp.task.timer;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

public class Timer2Test extends TimerTask{
   
  private String jobName = "";

  private String for
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值