ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用。今天我们来学习一下ScheduledExecutorService的用法。我们都太渺小了,那么容易便湮没于各自的殊途。

ScheduledExecutorService的简单使用

一、使用scheduleAtFixedRate()方法实现周期性执行

public class ScheduledExecutorServiceTest {public static void main(String[] args) {ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();executorService.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {System.out.println("run "+ System.currentTimeMillis());}}, 0, 100, TimeUnit.MILLISECONDS);}
}

运行的结果如下:立刻执行,而且每隔100毫秒执行一次。

run 1501051231331
run 1501051231427
run 1501051231527
run 1501051231628
run 1501051231726
run 1501051231827
run 1501051231926
run 1501051232026
run 1501051232127
.......

二、ScheduledExecutorService使用Callable延迟运行

package com.linux.thread;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;public class CallableRun {public static void main(String[] args) {try {List<Callable> callableList = new ArrayList<>();callableList.add(new MyCallableA());callableList.add(new MyCallableB());ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();ScheduledFuture futureA = executorService.schedule(callableList.get(0), 4L, TimeUnit.SECONDS);ScheduledFuture futureB = executorService.schedule(callableList.get(1), 4L, TimeUnit.SECONDS);System.out.println("            X = " + System.currentTimeMillis());System.out.println("返回值A:" + futureA.get());System.out.println("返回值B:" + futureB.get());System.out.println("            Y = " + System.currentTimeMillis());executorService.shutdown();} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}static class MyCallableA implements Callable<String> {@Overridepublic String call() throws Exception{try {System.out.println("callA begin " + Thread.currentThread().getName() + ", " + System.currentTimeMillis());TimeUnit.SECONDS.sleep(3); // 休眠3秒System.out.println("callA end " + Thread.currentThread().getName() + ", " + System.currentTimeMillis());} catch (Exception e) {e.printStackTrace();}return "returnA";}}static class MyCallableB implements Callable<String>  {@Overridepublic String call() throws Exception{System.out.println("callB begin " + Thread.currentThread().getName() + ", " + System.currentTimeMillis());System.out.println("callB end " + Thread.currentThread().getName() + ", " + System.currentTimeMillis());return "returnB";}}
}

运行的结果如下:

三、使用scheduleWithFixedDelay()方法实现周期性执行

package com.linux.thread;import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class RunMain {public static void main(String[] args) {ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();System.out.println("          x = " + System.currentTimeMillis());executorService.scheduleWithFixedDelay(new MyRunable(), 1, 2, TimeUnit.SECONDS);System.out.println("          y = " + System.currentTimeMillis());}static class MyRunable implements Runnable {@Overridepublic void run() {try {System.out.println("     begin = " + System.currentTimeMillis() + ", name: " + Thread.currentThread().getName());TimeUnit.SECONDS.sleep(4);System.out.println("     end = " + System.currentTimeMillis() + ", name: " + Thread.currentThread().getName());} catch (InterruptedException e) {e.printStackTrace();}}}
}

运行的结果如下:

友情链接

  • 可以参考博客:http://blog.csdn.net/cages/article/details/7300992
  • 关于spring中的定时器:http://blog.csdn.net/tsyj810883979/article/details/8481621

转自:https://www.cnblogs.com/huhx/p/baseusejavaScheduledExecutorService.html

转载于:https://www.cnblogs.com/zhi-xing/p/10399905.html

java高级----Thread之ScheduledExecutorService的使用相关推荐

  1. java高级----Thread之CyclicBarrier的使用

    CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).今天我们就学习一下CyclicBarrier的用法. Cycl ...

  2. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

  3. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  4. java延迟队列,java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. Java原子类中CAS的底层实现,java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  6. Java高级特性 - 多线程练习题

    第1关:顺序输出 任务描述 本关任务:利用多线程相关知识控制三个线程,依照先后顺序顺序输出. 相关知识(略) 编程要求 请仔细阅读右侧代码,在 Begin-End 区域内进行代码补充,使线程依照先后顺 ...

  7. 2022金三银四面试总结-Java高级篇

    Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静 ...

  8. Java面试题 java高级

    八:java高级 1:代码优化 (1)代码优化的目标是: 1 .减小代码的体积 2 .提高代码运行的效率 (2)代码结构层次的优化(目的:更加方便代码的维护–可维护性,可读性) 1.代码注释(代码规范 ...

  9. 网易云课堂微专业--Java高级开发工程师

    获取方式:公众号:文若课堂 ​ 5.微专业-java |    |──大纲.jpg          910.32KB |    |──阶段1:高性能编程专题 |    |    |──1.1.1 J ...

最新文章

  1. JavaMoney规范(JSR 354)与对应实现解读
  2. python 的回调函数
  3. torch 常用函数
  4. 拒绝图片延迟加载,爽爽的看美图
  5. (原创)cocos2dx-lua TableView官方demo分析
  6. LeetCode 53. 最大子序和(动态规划)
  7. vue点击input框出现弹窗_vue组件实现弹出框点击显示隐藏效果
  8. 每日一“酷”之string
  9. Java char转换为String,String转换为char数组
  10. php中时间戳和正常日期的相互转化
  11. eltable 无数据文案修改_el-table的二次封装详细版(一)
  12. Properties文件操作
  13. mybatis支持拼音、汉字模糊查询
  14. vue中使用iview修改Cascader的默认数据
  15. Python 后端统一社会信用代码校验
  16. imo教我们的互联网思维9大玩法
  17. 工作中提升效率的工具
  18. 国家级专精特新小巨人企业是什么?
  19. appium手机APP自动化定位元素
  20. Linux驱动编程 step-by-step

热门文章

  1. Go语言很好很强大,但我有几个问题想吐槽
  2. java SpringMVC mybatis 多数据源 代码生成器 SSM java redis shiro ehcache
  3. 五、oracle 表的管理
  4. centos6.3安装zabbix2.0.2记录
  5. Re-installation failed due to different application signatures
  6. android 解决错误:Intel HAXM is required to run this AVD
  7. android Map集合的遍历
  8. 生成一个随机100内小数,转换为保留两位小数的字符串,不考虑四舍五入的问题。
  9. 解决:object_detection/protos/*.proto: Invalid argument.
  10. (转)python3 计算字符串、文件md5值