一、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)相关推荐

  1. [19/04/07-星期日] 多线程_线程的状态(新生、就绪、运行、死亡)

    一.概念 一个线程对象在它的生命周期内,需要经历5个状态. ▪ 新生状态(New) 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方 ...

  2. 集群环境下定时调度的解决方案之Quartz集群

    集群环境下定时调度的解决方案之Quartz集群 参考文章: (1)集群环境下定时调度的解决方案之Quartz集群 (2)https://www.cnblogs.com/yinfengjiujian/p ...

  3. java集群调度_集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  4. 2、前端环境搭建(19.04.12)

    2.Emmet代码生成系统:用户代码

  5. Quartz.Net实现作业定时调度详解

    Quartz.Net实现作业定时调度详解 原文:Quartz.Net实现作业定时调度详解 1.Quartz.NET介绍 Quartz.NET是一个强大.开源.轻量的作业调度框架,你能够用它来为执行一个 ...

  6. 阿里云ubuntu源_优麒麟19.04即将发布,华为、阿里云、重大、360四大境像站鼎力支持!...

    截至今日,距离优麒麟19.04正式发布只剩7天了,而本次发布,除了桌面系统焕然一新外,我们的下载渠道也将进一步升级,除了默认的360下载通道之外,优麒麟还得到了华为.阿里云.重大三大开源镜像站的鼎力支 ...

  7. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程--基础知识 Java 多线程 -- synchronized关键字 java 多线程--一个定时调度的例子 java 多线程--quartz 定时调度的例子 ...

  8. 26_多线程_第26天(Thread、线程创建、线程池)_讲义

    今日内容介绍 1.多线程 2.线程池 01进程概念 A:进程概念 a:进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行, 即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能 ...

  9. java 多线程写缓存,Java多线程_缓存对齐

    1.什么是缓存对齐 当前的电脑中,数据存储在磁盘上,可以断电保存,但是读取效率较低.不断电的情况下,数据可以在内存中存储,相对硬盘效率差不多是磁盘的一万倍左右.但是运算时,速度最快的是直接缓存在CPU ...

最新文章

  1. 创建一个Scalar-valued Function函数来实现LastIndexOf
  2. 基于yolov5的工业缺陷检测方案
  3. c# 对文件流的读写
  4. 分析Kotlin协程只挂起不恢复会怎样(是否存在协程泄漏),以及挂起的协程存在哪里?
  5. pyqt5中sender方法介绍_【第五节】PyQt5事件和信号
  6. JAVA 客户端跳转与服务器端跳转 get与post
  7. 数据科学自动化_数据科学会自动化吗?
  8. 使用Visual Studio对项目重命名
  9. 课程设计——企业网络项目搭建(下)
  10. java 课程设计题目_Java课程设计题目有哪些?Java课程设计题目汇总
  11. 项目中常用字典表 —— 各个国家简称映射
  12. C语言指针和指针变量
  13. 华人“芯片女神”苏妈的硅谷传奇之路
  14. iOS相机、相册的访问权限
  15. 小学数学题的Java实现
  16. NET开发邮件发送功能的全面教程(含邮件组件源码)(
  17. 增强型for循环与Map集合的遍历
  18. 再谈谷歌搜索引擎使用技巧
  19. 豆瓣电影250数据分析精简版
  20. Vue-vue-cli的安装

热门文章

  1. 一个不错的Windows全平台DLL注入工具
  2. 计算机网络安全ipc默认共享,网管,请别随意关闭默认共享
  3. BrokerChain: A Cross-Shard Blockchain Protocol for Account/Balance-based State Sharding 阅读笔记
  4. 机械设计推荐的笔记本
  5. Python快速实现黄图检测
  6. VSCode终端无法输入命令的解决方法
  7. wamp 远程操作安装的痛苦经历 用teamviewer 旺旺远程连接
  8. 深入浅出玩转监控宝|网站监控之创建网站监控任务
  9. 一周要闻 | 超七成受访跨国企业依然留守中国市场;雀巢、赛诺菲、欧莱雅亮相消博会;万豪旗下奢华品牌瑞吉酒店将引入厦门...
  10. Android Studio 更新到指定版本