Java的定时调度

  一般在web开发中定时调度比较有用,因为要维护一个容器不关闭才可以一直定时操作下去。

  定时调度:每当一段时间之后,程序就会自动执行,就称为定时调度。如果要使用定时调动,则必须要保证程序要始终运行着,也就是说定时调度是在程序之外又启动了一个新的线程。

  完成定时调度需要Timer和TimerTask类的支持

Timer类:

  • l Timer类是一种线程设施,可以是现在某一时间或某一时间后,安排某一任务执行一次,或定期重复执行。给功能要与TimerTask类结合使用。TimerTask类用来实现由Timer类安排的一次或重复执行的某一任务。
  • l 每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续任务的执行,而这些后续的任务可能堆在一起,等到该任务完成后快速迅速执行。

   

schedule()和scheduleAtFixedRate()方法的区别:

两者区别在于重复执行任务时,对于时间间隔出现延迟的情况的处理:

  • l schedule()方法的执行时间间隔是固定的,如果之前出现了延迟的情况,之后也会继续按照指定的时间间隔来执行;
  • l scheduleAtFixedRate()方法可以根据出现的延迟时间自动调整下一次间隔的执行时间。

TimerTask类:

  要想执行具体的任务,则必须使用TimerTask类。TimerTask类是一个抽象类,如果要使用此类,需要自己建立一个类继承此类,并实现其中的抽象方法。

   

按照此概念,完成一个时间调度程序,每隔2秒打印一次时间。

定义一个类基础TimerTask类,完成具体的任务。

 1 import java.text.SimpleDateFormat;
 2 import java.util.Date;
 3 import java.util.TimerTask;
 4
 5 public class MyTask extends TimerTask{  //任务调度类都要继承此类
 6     @Override
 7     public void run() {  //完成具体的任务
 8         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
 9         System.out.println("当前系统时间:"+sdf.format(new Date()));
10     }
11 }

完成的是一个具体的任务操作类,以后定调度调的就是此类中的run()方法。

1 public class TestTimerTask {   //测试类
2     public static void main(String args[]){
3         Timer t = new Timer();  //建立Timer对象
4         MyTask mt = new MyTask();  //定义任务
5         t.schedule(mt, 1000,2000); //设置任务的执行,1秒后开始,每2秒执行一次
6     }
7 }

原文地址:https://www.cnblogs.com/mzct123/p/8290263.html

时间: 2024-11-10 11:25:14

Java的定时调度的相关文章

Java入门——定时调度

Java入门——定时调度 Timer类 Timer类是一种线程设施,可以用来实现在某一个时间或者某一段时间后安排某一个任务执行一次或者定时重复执行,该功能要与TimeTask配合使用. 每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否者可能会延迟后续任务的执行. 序号 方法 类型 描述 1 Timer() 构造 创建一个计时器,并且启动这个计时器 2 cancle() 普通 终止该计时器,并放弃所有已经安排的任务 3 purge() 普通 将已经取消的任务移除,一般用

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

java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 java 多线程—— 线程等待与唤醒 概述 第1部分 配置 第2部分 代码示例 第1部分 配置 有关quartz的api文档地址:Quartz Enterprise Job Scheduler 1.8.6 API 主要接口目录: 重点看下Job,Scheduler,Trigger,JobDetai

Java定时调度任务的实现

有时候,我们希望程序在将来的某一时刻执行,也有想过让它可以重复执行多次! 于是,我们就需要实现定时调度功能. 在java里,由两个类来共同实现定时调度:java.util.Timer 和 java.util.TimerTask Timer可以理解为有且只有一个后台线程对多个业务线程进行定时定频率调度 TimerTask可以理解为业务逻辑的编写 即:Timer按照一定的时间频率调度TimerTask里面的业务逻辑. 下面,通过实现怎么让程序在2秒后执行,来说明实现Timer调度的代码编写: Tim

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

java 多线程目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 学习了一段时间的多线程内容,项目中有个定时调度的需求,将之前的需求重新梳理了下,写了一个多线程调用的例子,加深学习. 定时调度的需求如下:设定任务的开始时间,分为单次调度和循环调度,访问指定的url. java 多线程--一个定时调度的例子

11.11-全栈Java笔记:线程状态转换和任务定时调度

线程状态转换 1)New :创建好线程对象,但没有启动的时候. 一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源. 2)就绪线程序通过Scheduler(调度程序)去确定是否运行. 3)Runing---dead:运行结束(非双向,为单向箭头). 4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件). 5)Runing-otherwise(阻塞):因程序原因:调用sleep或join之后,线程被阻塞.这时不具备运行的条件,此时线程进入阻塞池.sle

java 定时调度

<!-- 定时调度 --> <bean id="countTrafficDataQuertz" class="com.ncjk.utcs.common.quertz.CountTrafficData"></bean> <!-- 每天一次 --> <bean id="countTrafficDataJobDetail" class="org.springframework.schedu

Spring整合quartz框架实现任务定时调度

1.  首先需要引入需要的jar包,如上图所示. 2. 编写需要定时调度的测试类: package com.jp.task; import java.util.Date; public class TestTask{ private static int counter = 0; protected void execute() { long ms = System.currentTimeMillis(); System.out.println("\t\t" + "=====

springmvc+quartz简单实现定时调度

一.简介:Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序.Jobs可以做成标准的Java组件或 EJBs.Quartz的最新版本为Quartz 2.3.0. 二.因为定时调度,在很多业务上面都会涉及,想要根据自己的规则来生成自己想要的达到的目的.所以利用quartz来时间定时任务的触发.是非常有必要的. 三.

Timer类实现定时调度

使用timer类定时调度,生成文件 timer类需要通过监听器来初始化定时器,web容器在运行时自动加载 先写个定时任务类CreateFileTask,继承至TimerTask,需要重写run()方法 import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; i