一、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、创建JobDetail
JobDetail 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----");
}
}

[19/04/12-星期五] 多线程_任务定时调度(Timer、Timetask和QUARTZ)的更多相关文章

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

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

  2. Java多线程学习——任务定时调度

    Timer 本身就是一个线程,最主要的方法就是schedule(). schedule()的参数介绍: schedule(TimerTask task, long delay) //延迟delay毫秒 ...

  3. JAVA中的定时调度(Timer和TimerTask)

    某些时候我们需要定时去完成一些任务,这里举一个例子:我们需要在3秒钟后打印当前系统时间,此后每隔5秒重复此操作.代码如下: import java.util.TimerTask; import jav ...

  4. 安装教程-VMware 12 安装Ubuntu 19.04 桌面版

    VMware 12 安装Ubuntu 19.04 桌面版 1.实验描述 在虚拟机中,手动安装 Ubuntu 19.04 操作系统,为学习 Linux 桌面版提供平台,因此,有的参数有些差异,请勿较真. ...

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

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

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

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

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

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

  8. 其它综合-VMware虚拟机安装Ubuntu 19.04 版本

    Ubuntu 19.04 版本安装过程 1. 环境: 使用的虚拟机软件是VMware,版本为 12 .(网上一搜一大推,在此不再演示.) 使用的 ISO镜像为Ubuntu 19.04.(自己也可以在网 ...

  9. 【手把手教你】win10 虚拟机 VMware Workstation Pro 15下安装Ubuntu 19.04

    虚拟机 VMware Workstation Pro 15.5.0 及永久激活密钥 https://www.cnblogs.com/zero-vic/p/11584437.html Ubuntu19. ...

随机推荐

  1. Octotree Chrome安装与使用整理

    Octotree Chrome作用: 主要使你在github查看项目时可以清晰明了的看到项目的结构以及具体代码,使下载代码更具有目的性,减少不必要代码的下载,而且看起来更清楚. 效果图:(安装插件前) ...

  2. 初探Spring源码之Spring Bean的生命周期

    写在前面的话: 学无止境,写博客纯粹是一种乐趣而已,把自己理解的东西分享出去,不意味全是对的,欢迎指正! Spring 容器初始化过程做了什么? AnnotationConfigApplication ...

  3. mysql-配置主从数据库,实现读写分离

    主从分离的原则:所有的写操作在主数据库中进行,因为主从分离的原理是涉及到同步数据,那就可能会出现延迟或者其他问题,就可能会出现脏数据. 所以,在从库中进行的读操作也必须是有一定容忍性的数据,例如日志等 ...

  4. CSS单行、多行文本溢出显示省略号(……)解决方案

    单行文本溢出显示省略号(-) text-overflow:ellipsis-----部分浏览器还需要加宽度width属性 .ellipsis{ overflow: hidden; text-overf ...

  5. csharp: Converting chinese character to Unicode

    Function chinese2unicode(Str) Dim Str_one:Str_one = "" Dim Str_unicode:Str_unicode = " ...

  6. js-TextArea的换行符处理

    js-txt文本处理 写自己主页项目时所产生的小问题拿出来给大家分享分享,以此共勉. ---DanlV TextArea的换行符处理 TextArea文本转换为Html:写入数据库时使用 js获取了t ...

  7. Java基础重点知识之欣欣向然

    题目: 第一题:二重循环: public class Text01 { //完成歌曲排序的效果 public static void main(String[] args) { String[] zi ...

  8. c++开发ocx入门实践四

    总结一下参数传递和方法调用的方法,ocx和容器进行参数传递,包括ocx和js,ocx和c++,ocx和c#.

  9. Python爬虫教程-19-数据提取-正则表达式(re)

    本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式 Python爬虫教程-19-数据提取-正则表达式(re) 正则表达式 ...

  10. 任务十四:零基础JavaScript编码(二)

    任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM ...