一、Quartz的特点 按作业类的继承方式来分,主要有以下两种: 作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式作业类不继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 注:个人比较推崇第二种,因为这种方式下的

在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread 这是最常见的,创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果。这样可以快速简单的实现,代码如下: package com.vmware.task;import java.util.Date;import java.util.List;import java.util.Map;import com.vmware.dao.TemplateDao;import com.vmware.pojo.Template;import com.vmware.util.TimeUtil;public class TemplateVMTask implements Runnable

{

@Override

public void run() {

while(true){

long starttime=new Date().getTime();//开始时间

String sql="SELECT * from tb_flw_content where type_id='1' or type_id='4'

and `status`='2'";

TemplateDao dao=new TemplateDao();

List list=dao.getTemplate(sql);

VirtualMachineTemplate template=new VirtualMachineTemplate();

template.tempalteToVm(list);

long endtime=new Date().getTime();//结束时间

long usetime=endtime-starttime;//使用时间

try{

//读取配置文件

TimeUtil util=new TimeUtil();

Map map=util.getURL();

long time=Long.parseLong(String.valueOf(map.get("time")))*1000;//配置时间

if(time-usetime>0){

Thread.sleep(time-usetime);//休眠时间

}

}catch(Exception e){

e.printStackTrace();

}

}

}}在main 方法中,启动该线程 package com.vmware.test;import com.vmware.task.TemplateVMTask;public class Test {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

TemplateVMTask task=new TemplateVMTask();

Thread thread=new Thread(task);

thread.start();

}} 用Timer和TimerTask 上面的实现是非常快用三种方法来实现n!实现使用BigDecimal类,因为用int最多正确算到12!,用long最多正确算到20!.实现方法都比较简单,但是转换为BigDecimal实现后可能看起来有点莫名其妙。废话不多说,直接上代码:

第一种方法:从1开始,一直递增乘到n,从而实现n!

Java代码速简便的,但它也缺少一些功能。 用Timer和TimerTask的话与上述方法相比有如下好处: 当启动和去取消任务时可以控制 第一次执行任务时可以指定你想要的delay时间 在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。 Timer实例可以调度多任务,它是线程安全的。 当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务: import java.util.Timer;import java.util.TimerTask;public class Task2 {

public static void main(String[] args) {

TimerTask task = new TimerTask() {

@Override

public void run() {

// task to run goes here

System.out.println("Hello !!!");

}

};

Timer timer = new Timer();

long delay = 0;

long intevalPeriod = 1 * 1000;

// schedules the task to be run in an interval

timer.scheduleAtFixedRate(task, delay,

intevalPeriod);

} // end of main} ScheduledExecutorService ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。 相比于上两个方法,它有以下好处:

相比于Timer的单线程,它是通过线程池的方式来执行任务的

可以很灵活的去设定第一次执行任务delay时间

提供了良好的约定,以便设定执行的时间间隔

我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间: import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Task3 {

public static void main(String[] args) {

Runnable runnable = new Runnable() {

public void run() {

// task to run goes here

System.out.println("Hello !!");

}

};

ScheduledExecutorService service = Executors

.newSingleThreadScheduledExecutor();

service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);

}}

java se 定时任务_Java实现定时任务的三种方法相关推荐

  1. java string分割_java 字符串分割的三种方法(总结)

    最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方 ...

  2. java浮点数化为整数_[Java教程]javascript浮点数转换成整数三种方法

    [Java教程]javascript浮点数转换成整数三种方法 0 2014-06-24 04:00:27 将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如 ...

  3. Java程序初始化启动自动执行的三种方法

    目录 @PostConstruct注解 CommandLineRunner接口 ApplicationRunner 接口 @Order注解设置启动顺序 分享一下自己用过的java程序初始化启动自动执行 ...

  4. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  5. java的字符串截取函数_java 字符串截取的三种方法(推荐)|chu

    众所周知,java提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的 ...

  6. java字符串abc反转_JAVA字符串反转的三种方法

    方法一:使用StringBuilder import java.util.Scanner; public class StrReversal { public static void main(Str ...

  7. java截取倒数后六位的字符串_java 字符串截取的三种方法(推荐)

    众所周知,java提供了很多字符串截取的方式.下面就来看看大致有几种. 1.split()+正则表达式来进行截取. 将正则传入split().返回的是一个字符串数组类型.不过通过这种方式截取会有很大的 ...

  8. java定时执行某个方法_Java中定时执行任务的三种方法

    Java中定时执行任务的三种方法 1)java.util.Timer 这个方法应该是最常用的,不过这个方法需要手工启动你的任务: Timer timer=new Timer(); timer.sche ...

  9. java连接MySQL几种方法_Java连接MySQL数据库三种方法

    好久没有更新博客了!今天利用周目时学习了一下数据库mysql.介绍一下数据库的三种连接方式! 开发工具:Myeclipse MySQL5.6 MySQL连接驱动:mysql-connector-jav ...

  10. Java实现监听文件变化的三种方法,推荐第三种

    背景 在研究规则引擎时,如果规则以文件的形式存储,那么就需要监听指定的目录或文件来感知规则是否变化,进而进行加载.当然,在其他业务场景下,比如想实现配置文件的动态加载.日志文件的监听.FTP文件变动监 ...

最新文章

  1. [译]Selenium Python文档:一、安装
  2. P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
  3. PerfLab(直接在服务器上完成)
  4. gstreamer应用
  5. 浏览器的一个请求从发送到返回都经历了什么?
  6. Fisher–Yates shuffle 算法
  7. 时隔2月,我的第二篇
  8. c语言计算结果为1. inf0000,C语言复习题及答案老师给的
  9. 有道词典 Chrome取词插件
  10. robot framework接口自动化测试post请求
  11. python 字符编码识别及转换
  12. Android科大讯飞语音合成
  13. Spring Cloud Netflix 服务注册与发现 — Eureka 入门案例
  14. 基线、底线、顶线、中线
  15. 20X01 FCPX插件 音频可视化视觉特效 PFS Fcpx Audio Effector
  16. Vue中使用pdfJs预览PDF、图片
  17. uni-app 微信小程序 + 友盟统计 sdk
  18. android hal单元测试,用于HAL测试的参数化gtest
  19. 命令行模式下运行js文件
  20. S32K144学习笔记:4 信号复用和引脚分配

热门文章

  1. JSF Tomcat配置示例
  2. 如何使用反射来基于JPA注释记录数据模型
  3. 带弹簧的Hazelcast分布式执行
  4. Java EE6事件:JMS的轻量级替代品
  5. java aes 解密 文件_Java AES文件加解密
  6. 图片识别出处_AI人脸识别
  7. 嵩天python笔记_嵩天Python学习笔记-05
  8. C语言中的指针有什么作用
  9. 总结C语言中的数组知识点
  10. brew下载的mysql卸载_Mac中mongoDB的安装与卸载步骤详解