Timer和TimerTask

有如下好处:

1.当启动和取消任务时可以控制
2.第一次执行任务时可以指定你想要的delay时间

在实现时,Timer类可以调度任务,TimerTask则是通过在run()方法里实现具体任务。
Timer实例可以调度多任务,它是线程安全的。
当Timer的构造器被调用时,它创建了一个线程,这个线程可以用来调度任务。
下面是代码:

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;//用DATE类实现
public class TimedTask1 {// 获取应该在多少秒后public static long getTaskTime(int shi,int fen) {DateFormat sdf = new SimpleDateFormat("HH:mm:ss");// 当前时分秒字符串切成数组String[] sArr = sdf.format(new Date()).split(":");// 从数组取值换算成 秒计数值long currentMiao = (Integer.parseInt(sArr[0]) *60*60) + (Integer.parseInt(sArr[1]) *60)+ Integer.parseInt(sArr[2]);// 设定的执行时间换算成 秒计数值long runTime = (shi*60*60 + fen*60);if (currentMiao <= runTime) {return runTime - currentMiao;} else {return currentMiao + (24*60*60) - (currentMiao - runTime);}}// 定时任务public static void cronJob(int shi,int fen) {Timer timer = new Timer();timer.schedule(new TimerTask() {// 把run方法里的内容换成要运行的代码public void run() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("当前的系统时间为:" + sdf.format(new Date()));}}, getTaskTime(shi,fen) *1000, 24*60*60*1000);}/*public static void main(String[] args) {cronJob(18,30);}*/
}// 用Calendar实现
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;public class TimedTask2 {public static void cronJob(int shi, int fen, int miao) {Calendar cal = Calendar.getInstance();// 每天定点执行cal.set(Calendar.HOUR_OF_DAY, shi);cal.set(Calendar.MINUTE, fen);cal.set(Calendar.SECOND, miao);Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {// 把run方法里的内容换成你要执行的内容SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("当前的系统时间为:" + sdf.format(new Date()));}}, cal.getTime(), 24 * 60 * 60 * 1000);}/** public static void main(String[] args) { * cronJob(18, 30, 0); //24小时制 时分秒 * }*/
}

java定时任务接口ScheduledExecutorService   

ScheduledExecutorService是从Java SE 5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。

ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。

需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。

好处:

1.相比于Timer的单线程,它是通过线程池的方式来执行任务的2.可以很灵活的去设定第一次执行任务delay时间3.提供了良好的约定,以便设定执行的时间间隔。

下面是代码:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class TimedTask {public static void main(String[] args) {Runnable runnable = new Runnable() {public void run() {// 把run方法里的内容换成你要执行的内容SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("当前的系统时间为:" + sdf.format(new Date()));}};ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();//public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);//command--执行的任务,initialDelay--延迟开始,period--间隔时间,unit--时间单位service.scheduleAtFixedRate(runnable, 0, 5, TimeUnit.SECONDS);}
}

Java指定时间执行任务相关推荐

  1. java+timer+退出,java timer 兑现在指定时间执行方法

    java timer 实现在指定时间执行方法 最近在弄一个定时发送的项目,需要定时执行方法,于是用到了Timer,但是我想要的功能网络上的资源比较少,所以自己研究了一下. 下面是我写的一些代码 imp ...

  2. java每隔1分钟执行一次_启动系统定时器,每隔1分钟/指定时间执行任务 学习笔记...

    import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask ...

  3. java 调度任务_Java Quartz 任务指定时间执行,任务调度框架

    quartz,spring-quartz,spring-task,spring-schedule四者的区别: quartz 是一个调度器,可以放任务进去,对任务指定时间执行. spring-quart ...

  4. sql语句延时执行或者是指定时间执行

    --使用waitfor语句延迟或暂停程序的执行 --waitfor{delay'time'|time 'time'} delay是指间隔时间 最长到24小时 time是指定时间执行 waitfor d ...

  5. linux中用at命令5分钟后执行,我使用过的Linux命令之at - 在指定时间执行一次任务...

    我使用过的Linux命令之at - 在指定时间执行一次任务 用途说明 at命令用于在指定时间执行一次任务.如果任务需要重复执行,需用crontab. atq用于打印队列中的任务,atrm用于删除任务. ...

  6. 分布式定时任务原理以及解决方案-指定时间执行定时任务

    分布式定时任务原理以及实现 一.单机指定时间执行定时任务实现方式 Timer运行机制 ScheduledThreadPoolExecutor的运行机制 原理图 Leader/Follower模式 Ti ...

  7. 【UiBot】RPA定时触发:机器人如何在指定时间执行任务?

    Q:RPA机器人如何在指定时间点执行任务? A:用流程机器人(UiBot Worker),设置定时触发. 人机交互的流程机器人(UiBot Worker)除了手动运行流程之外,还提供了"触发 ...

  8. JavaScript 整分或者指定时间执行操作

    整分 let timer = null function timeFunc() {const date = new Date()// 取当前分钟个位数,方便计算const mins = date.ge ...

  9. java定时每天指定时间执行任务

    /*** @param time 每天几点执行定时任务 24小时制时间 例: 08:00:00 20:00:00* @throws ParseException*/ private void timi ...

最新文章

  1. matlab对图像进行增强,利用matlab对图像进行增强处理.doc
  2. C#中更改DataTable某列的值,格式化显示指定列的数据
  3. reddit_如何将多个子Reddit与多个Reddit合并
  4. 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()
  5. 在CSS中使用not:first-child选择器
  6. 你真的知道 == 和 equals 的区别吗?
  7. 动态ACL+自反ACL
  8. Servlet教程第4讲笔记
  9. 苹果cmsv10仿美剧吧自适应好看的免费高端简约模板
  10. mysql卸载教程,只需三步
  11. DBSCAN聚类算法的实现
  12. 那些崩溃率低于万分之一的独角兽APP都作对了什么?
  13. 这世上,真有人会陪你手握屠龙刀,杀得生活措手不及!
  14. Tomcat开启APR模式并设置Tomcat为开机自启动服务
  15. oracle数据库与实例的区别与联系
  16. 第69天-内网安全-域横向 CobaltStrikeSPNRDP
  17. WAF是什么?又有什么作用?
  18. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴
  19. angularjs 获取复选框的值_基于uFUN开发板的心率计(一)DMA方式获取传感器数据
  20. Head First (1) - 春江水暖鸭先知

热门文章

  1. mysql 启动出现系统错误193
  2. 桥梁防撞智能预警系统方案
  3. 如何使用python编程抢京东优惠券 知乎_618!python京东 PC 版抢券程序
  4. vscode EIDE 使用手册
  5. 模拟测静电场实验报告
  6. 2022年中职——网络搭建国赛windows脚本写法(正式题详细解析)
  7. 贾树森_(第三章)24种生活场景_(第四课)怎样自拍好看又不落俗套
  8. go开发之restful等幂性
  9. 协议(五)-从电报机到智能手机
  10. 京东按关键字搜索商品 API 返回值说明