[19/04/12-星期五] 多线程_任务定时调度(Timer、Timetask和QUARTZ)
一、Timer和Timetask
通过Timer和Timetask,我们可以实现定时启动某个线程。
java.util.Timer
在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,
只是这个线程是用来实现调用其它线程的。
java.util.TimerTask
TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。
在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。
【代码】
/***任务定时调度:Timer类 (相当于闹钟) TimerTask类 (抽象类)* */ package cn.sxt.thread;import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask;public class Test_0412_TimeDispatch {public static void main(String[] args) {Timer timer=new Timer();//闹钟//timer.schedule(new MyTask(), 3000);//执行安排。3秒后执行MyTask()类中run方法,仅执行1次//timer.schedule(new MyTask(), 2000,1000);//中间参数:第一次执行的时间,2秒后,每隔1秒执行一次run方法,执行多次//timer.schedule(new MyTask(), new Date(3000),1000);//5秒后,每隔1秒执行一次run方法,执行多次Calendar calendar=new GregorianCalendar(2019,03,10,00,14,50);//指定2019年04年10日00点14分50秒这个时间来运行程序timer.schedule(new MyTask(), calendar.getTime(),1000);}} //任务类 class MyTask extends TimerTask{public void run() {for (int i = 0; i < 5; i++) {System.out.println(i+"->休息一下");}System.out.println("end");}}
二、QUARTZ(石英表)
package cn.sxt.thread;import static org.quartz.DateBuilder.evenSecondDateAfterNow; import static org.quartz.JobBuilder.newJob; import static org.quartz.TriggerBuilder.newTrigger;import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.util.Date;public class SimpleExample {public void run() throws Exception {//1、 创建Scheduler的工厂SchedulerFactory sf = new StdSchedulerFactory();//2、从工厂获得调度器Scheduler sched = sf.getScheduler();//3、创建JobDetailJobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();//4、触发器 Date runTime=evenSecondDateAfterNow();Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();// 5、注册任务和触发条件 sched.scheduleJob(job, trigger);//6、启动 sched.start();try {// 5秒后停下Thread.sleep(5L * 1000L);} catch (Exception e) {}sched.shutdown(true);}public static void main(String[] args) throws Exception {SimpleExample example = new SimpleExample();example.run();}}
package cn.sxt.thread;import java.util.Date;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException;public class HelloJob implements Job {public HelloJob() {}public void execute(JobExecutionContext context)throws JobExecutionException {System.out.println("---start----");System.out.println("Hello World"+new Date());System.out.println("---end----");} }
转载于:https://www.cnblogs.com/ID-qingxin/p/10680762.html
[19/04/12-星期五] 多线程_任务定时调度(Timer、Timetask和QUARTZ)相关推荐
- [19/04/07-星期日] 多线程_线程的状态(新生、就绪、运行、死亡)
一.概念 一个线程对象在它的生命周期内,需要经历5个状态. ▪ 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方 ...
- 集群环境下定时调度的解决方案之Quartz集群
集群环境下定时调度的解决方案之Quartz集群 参考文章: (1)集群环境下定时调度的解决方案之Quartz集群 (2)https://www.cnblogs.com/yinfengjiujian/p ...
- java集群调度_集群环境下定时调度的解决方案之Quartz集群
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
- 2、前端环境搭建(19.04.12)
2.Emmet代码生成系统:用户代码
- Quartz.Net实现作业定时调度详解
Quartz.Net实现作业定时调度详解 原文:Quartz.Net实现作业定时调度详解 1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个 ...
- 阿里云ubuntu源_优麒麟19.04即将发布,华为、阿里云、重大、360四大境像站鼎力支持!...
截至今日,距离优麒麟19.04正式发布只剩7天了,而本次发布,除了桌面系统焕然一新外,我们的下载渠道也将进一步升级,除了默认的360下载通道之外,优麒麟还得到了华为.阿里云.重大三大开源镜像站的鼎力支 ...
- java 多线程——一个定时调度的例子
java 多线程 目录: Java 多线程--基础知识 Java 多线程 -- synchronized关键字 java 多线程--一个定时调度的例子 java 多线程--quartz 定时调度的例子 ...
- 26_多线程_第26天(Thread、线程创建、线程池)_讲义
今日内容介绍 1.多线程 2.线程池 01进程概念 A:进程概念 a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能 ...
- java 多线程写缓存,Java多线程_缓存对齐
1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...
最新文章
- 创建一个Scalar-valued Function函数来实现LastIndexOf
- 基于yolov5的工业缺陷检测方案
- c# 对文件流的读写
- 分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
- pyqt5中sender方法介绍_【第五节】PyQt5事件和信号
- JAVA 客户端跳转与服务器端跳转 get与post
- 数据科学自动化_数据科学会自动化吗?
- 使用Visual Studio对项目重命名
- 课程设计——企业网络项目搭建(下)
- java 课程设计题目_Java课程设计题目有哪些?Java课程设计题目汇总
- 项目中常用字典表 —— 各个国家简称映射
- C语言指针和指针变量
- 华人“芯片女神”苏妈的硅谷传奇之路
- iOS相机、相册的访问权限
- 小学数学题的Java实现
- NET开发邮件发送功能的全面教程(含邮件组件源码)(
- 增强型for循环与Map集合的遍历
- 再谈谷歌搜索引擎使用技巧
- 豆瓣电影250数据分析精简版
- Vue-vue-cli的安装
热门文章
- 一个不错的Windows全平台DLL注入工具
- 计算机网络安全ipc默认共享,网管,请别随意关闭默认共享
- BrokerChain: A Cross-Shard Blockchain Protocol for Account/Balance-based State Sharding 阅读笔记
- 机械设计推荐的笔记本
- Python快速实现黄图检测
- VSCode终端无法输入命令的解决方法
- wamp 远程操作安装的痛苦经历 用teamviewer 旺旺远程连接
- 深入浅出玩转监控宝|网站监控之创建网站监控任务
- 一周要闻 | 超七成受访跨国企业依然留守中国市场;雀巢、赛诺菲、欧莱雅亮相消博会;万豪旗下奢华品牌瑞吉酒店将引入厦门...
- Android Studio 更新到指定版本