从j2se的api文档上查看ScheduledExecutorService的方法都是推迟一段时间然后相隔一段时间之后再去执行,没有想Timer定时器一样的可以在定点时间执行的api,如果也想像Timer那样定时执行就需要对ScheduledExecutorService的方法传入参数处理一下,下面是个人使用ScheduledExecutorService做的每天凌晨3点做的定时执行任务demo

  1. package com.liu.test;
  2.  
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.LinkedList;
  7. import java.util.List;
  8. import java.util.concurrent.Executors;
  9. import java.util.concurrent.ScheduledExecutorService;
  10. import java.util.concurrent.ScheduledFuture;
  11. import java.util.concurrent.TimeUnit;
  12.  
  13. public class ThreadTest {
  14.  
  15. public static void main(String[] args) {
  16. //创建含有三个线程的计划线程池
  17. ScheduledExecutorService service = Executors.newScheduledThreadPool(3);
  18. //一天的毫秒数
  19. long oneDay = 24 * 60 * 60 * 1000;
  20. //计算初始延迟的毫秒数
  21. long initDelay = getTimeMillis("3:00:00") - System.currentTimeMillis();
  22. initDelay = initDelay > 0 ? initDelay : initDelay + oneDay;
  23.  
  24. List<String> list1 = new LinkedList<String>();
  25. list1.add("第一个 :");
  26.  
  27. List<String> list2 = new LinkedList<String>();
  28. list2.add("第二个 ");
  29.  
  30. List<String> list3 = new LinkedList<String>();
  31. list3.add("第三个 ");
  32.  
  33. //执行三个任务
  34. ScheduledFuture future = service.scheduleAtFixedRate(new RunnableTest(list1), initDelay, oneDay, TimeUnit.MILLISECONDS);
  35. service.scheduleAtFixedRate(new RunnableTest(list2), initDelay, oneDay, TimeUnit.MILLISECONDS);
  36. service.scheduleAtFixedRate(new RunnableTest(list3), initDelay, oneDay, TimeUnit.MILLISECONDS);
  37.  
  38. }
  39.  
  40. private static long getTimeMillis(String time) {
  41. // TODO Auto-generated method stub
  42. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  43. SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd");
  44.  
  45. try {
  46. long fixedTime = dateFormat.parse(dayFormat.format(new Date())+" "+time).getTime();
  47. return fixedTime;
  48. } catch (ParseException e) {
  49. // TODO Auto-generated catch block
  50. e.printStackTrace();
  51. }
  52. return 0;
  53. }
  54.  
  55. }
  56.  
  57. package com.liu.test;
  58.  
  59. import java.util.List;
  60.  
  61. public class RunnableTest implements Runnable {
  62.  
  63. private List<String> list;
  64.  
  65. public RunnableTest() {
  66. }
  67.  
  68. public RunnableTest(List<String> list){
  69. this.list = list;
  70. }
  71.  
  72. @Override
  73. public void run() {
  74. // TODO Auto-generated method stub
  75. for(int i=0;i<10;i++){
  76. if(i%3 == 0){
  77. try {
  78. Thread.sleep(3000);
  79. System.out.println(list.get(0)+ "3 number +" + i);
  80. } catch (InterruptedException e) {
  81. // TODO Auto-generated catch block
  82. e.printStackTrace();
  83. }
  84. }
  85. }
  86. }
  87.  
  88. }

ScheduledExecutorService周期性的定时任务的更多相关文章

  1. 基于ScheduledExecutorService的并发定时任务处理能力测试

    测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...

  2. java 线程池 ScheduledExecutorService

    ScheduledExecutorService执行周期性或定时任务 https://blog.csdn.net/u013851082/article/details/70207640

  3. Linux的定时任务

    分两种:一次性的定时任务.周期性的定时任务. 一次性的定时任务,又称at定时任务,命令为atd ,这里d是deamon的首字母,守护的意思,指守护进程:其实很多程序都是以d结尾,如httpd.memc ...

  4. ScheduledExecutorService--目前最理想的定时任务实现方式

    ScheduledExecutorService 理想的定时任务实现方式 : 通过线程池的方式来执行任务的 可以灵活的设定第一次执行任务延迟时间 提供了良好的约定,以便设定定时执行的间隔时间代码实现: ...

  5. 定时任务莫名停止,Spring 定时任务存在 Bug??

    Hello~各位读者新年好!这里楼下小黑哥给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有余屯屯屯. 那年那 Bug 春节放假,小黑哥坐上高铁回家,突然想到一次生产问题.那是小黑哥参加工作第一年,那一年国庆 ...

  6. 定时任务莫名停止,Spring 定时任务存在 Bug?

    专注于Java领域优质,技术欢迎关注 作者: 鸭血粉丝 来自:Java极客技术 Hello~各位读者新年好,我是鸭血粉丝(大家可以称呼我为「阿粉」).这里阿粉给大家拜个年,祝大家蒸蒸日上烫烫烫,年年有 ...

  7. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  8. Android开发 定时任务清理数据

    原文地址:Android开发 定时任务清理数据 | Stars-One的杂货小窝 公司项目,需要整定时任务,对数据进行清理,需要在每天凌晨0:00进行数据的清理,使用了Alarm和广播的方式来实现 P ...

  9. 我终于会写 Java 的定时任务了!

    前言 学过定时任务,但是我忘了,忘得一干二净,害怕,一直听别人说: 你写一个定时任务就好了. 写个定时任务让他去爬取就行了. 我不会,所以现在得补回来了,欠下的终究要还的,/(ㄒoㄒ)/~~ 定时任务 ...

随机推荐

  1. plupload如何限制上传文件数量,限制只能上传单个文件

    1 完整代码 $(function() { $("#uploader").pluploadQueue({ runtimes : 'html5,gears,flash,silverl ...

  2. np.concatenate

  3. 清除JAVA 项目中的注释

    package com.lookcoder.inschool.utils; import java.io.BufferedReader; import java.io.File; import jav ...

  4. mysql 中 int 等类型如何选择

    详见:https://blog.csdn.net/samll_snail/article/details/86534719 .

  5. SQL多个逗号分开的字段值 取对应的数据名称信息

    字段值 函数实现: )) ) as begin set @strs=','+@strs+',' ) ) set @str2='' declare SyncOrderCursor cursor for ...

  6. [LeetCode] 535. Encode and Decode TinyURL 编码和解码短网址

    Note: This is a companion problem to the System Design problem: Design TinyURL. TinyURL is a URL sho ...

  7. CentOS的vsftp修改默认配置路径方法

    修改ftp的根目录只要修改/etc/vsftpd/vsftpd.conf文件即可: 加入如下几行: local_root=/var/www/htmlchroot_local_user=YESanon_ ...

  8. 解决java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider

    今天在集成Mapper时 出现如下错误 java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvi ...

  9. mysql 5.7 sql_mode设置 坑

    原文地址:https://blog.csdn.net/u012259256/article/details/56482218 1.查看sql_mode select @@sql_mode查询出来的值为 ...

  10. 用js实现promise

    /*       自定义promise         1. 执行MyPromise构造函数,要立即执行executor         2. promise实例对象,内部有三种状态          ...