Java定时任务整理(亲测)

这里简单总结以下三种基本的定时任务的使用:

  1. JDK提供的定时操作
  2. Quartz轻量级框架
  3. Spring提供的定时操作

说明:这里测试采用JDK8,只做简单使用总结。

一、 JDK提供的定时操作

JDK自带的Timer类,以及JDK1.5+ 新增的ScheduledExecutorService接口的实现类ScheduledThreadPoolExecutor。

1. Timer类

使用jdk提供的Timer类,此类是线程安全的,多个线程可以共享单个Timer对象而无需进行外部同步。

注:构造方法、常用方法请查询相关API。

 void cancel() ;  //终止此计时器,丢弃所有当前已安排的任务。 

【例】:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public static void main(String[] args) throws ParseException {

	/**
	 * 定时任务一:延迟0.5s启动,每隔1s执行一次
	 * (等任务结束再开始计算时间间隔,即下次任务执行开始时间为:上次任务执行所用时间+间隔时间)
	 */
	new Timer("testTimer1").schedule(new TimerTask() {//testTimer1为线程名称
	          @Override
	          public void run() {
	          	System.out.println("当前时间:" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
	          }
	      }, 500, 1000);//单位:毫秒
	
	/**
	 * 定时任务二:指定日期时间启动,每隔1s执行一次
	 * (每间隔1秒执行一次,不管上次任务执行情况,有并发情况)
	 */
	Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2019-11-10 11:11:00");
	   new Timer("testTimer2").scheduleAtFixedRate(new TimerTask() {//testTimer2为线程名称
	       @Override
	       public void run() {
	       	System.out.println("当前时间:" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
	       }
	   }, date, 1000);//单位:毫秒
   
}

2. ScheduledThreadPoolExecutor类

注:构造方法、常用方法请查询相关API。

【例】:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public static void main(String[] args) throws ParseException {

	/**
	 * 定时任务一:延迟1s启动,仅执行一次
	 */
	ScheduledExecutorService scheduledExecutorService1 = Executors.newScheduledThreadPool(10);
	scheduledExecutorService1.schedule(new Runnable() {
           @Override
           public void run() {
           	System.out.println("当前时间:" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
           }
       },1, TimeUnit.SECONDS);
	
	/**
	 * 定时任务二:延迟1s启动,每隔1s执行一次,是前一个任务开始时就开始计算时间间隔,但是会等上一个任务结束在开始下一个
	 */
	ScheduledExecutorService scheduledExecutorService2 = Executors.newScheduledThreadPool(10);
	scheduledExecutorService2.scheduleAtFixedRate(new Runnable() {
		@Override
		public void run() {
			System.out.println("当前时间:" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
		}
	}, 1, 1, TimeUnit.SECONDS);
	
	/**
	 * 定时任务三:延迟1s启动,在前一个任务执行完成之后,延迟1s再执行
	 */
	ScheduledExecutorService scheduledExecutorService3 = Executors.newScheduledThreadPool(10);
       scheduledExecutorService3.scheduleWithFixedDelay(new Runnable() {
           @Override
           public void run() {
           	System.out.println("当前时间:" + new SimpleDateFormat("HH:mm:ss").format(new Date()));
           }
       }, 1, 1, TimeUnit.SECONDS);
   
}

二、 Quartz

链接到Quartz专栏


三、Spring3.0以后自带的task

链接到spring定时任务专栏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值