本人邮箱: <kco1989@qq.com>
欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco
github: https://github.com/kco1989/kco
代码已经全部托管github有需要的同学自行下载

引言

java 提供的线程池还有一个,那就是任务调度线程池ScheduledThreadPoolExecutor,它其实是ThreadPoolExecutor的一个子类.

理论

我们通过查看ScheduledThreadPoolExecutor的源代码,可以发现ScheduledThreadPoolExecutor的构造器都是调用父类的构造器,只是它使用的工作队列是java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue通过名字我们都可以猜到这个是一个延时工作队列.
因为ScheduledThreadPoolExecutor的最大线程是Integer.MAX_VALUE,而且根据源码可以看到executesubmit其实都是调用schedule这个方法,而且延时时间都是指定为0,所以调用executesubmit的任务都直接被执行.

例子 搞几个延时炸弹

我们搞几个延时炸弹,让它们每个5s炸一次

public class TestMain {public static void main(String[] args) throws InterruptedException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");ScheduledThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(5);for (int i = 0; i < 5; i ++){final int temp = i + 1;pool.schedule(() -> {System.out.println("第"+temp+"个炸弹爆炸时间:" + simpleDateFormat.format(new Date()));}, temp * 5, TimeUnit.SECONDS);}pool.shutdown();System.out.println("end main时间:" + simpleDateFormat.format(new Date()));}
}

运行结果:

end main时间:2016-11-03 19:58:31
第1个炸弹爆炸时间:2016-11-03 19:58:36
第2个炸弹爆炸时间:2016-11-03 19:58:41
第3个炸弹爆炸时间:2016-11-03 19:58:46
第4个炸弹爆炸时间:2016-11-03 19:58:51
第5个炸弹爆炸时间:2016-11-03 19:58:56

ok,这个类相对比较简单,我就不多讲了

后记

在正在项目中,一般如果需要使用定时任务,不会直接使用这个类的.有一个quartz已经把定时任务封装的很好了.它是通过cron表示时,可以指定某一个任务每天执行,或者每周三下午5点执行.更多的资料可以去查百度.或者等以后有机会我再整理一写常用jar用法系列文章.就这样了.

打赏

如果觉得我的文章写的还过得去的话,有钱就捧个钱场,没钱给我捧个人场(帮我点赞或推荐一下)

(二十)java多线程之ScheduledThreadPoolExecutor相关推荐

  1. (十)java多线程之CountDownLatch

    目录 引言 理论 例子 打赏 本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://gi ...

  2. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

  3. Java多线程之volatile详解

    Java多线程之volatile详解 目录: 什么是volatile? JMM内存模型之可见性 volatile三大特性之一:保证可见性 volatile三大特性之二:不保证原子性 volatile三 ...

  4. Java多线程之sleep

    Java多线程之sleep 一.Sleep(long millis) 使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性. 线程不会丢失任何显示器的所 ...

  5. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  6. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

  7. Java多线程之CAS缺点

    Java多线程之CAS缺点 目录: 循环时间开销很大 只能保证一个共享变量的原子操作 引来ABA问题及解决方案(重点) 1. 循环时间开销很大 通过看源码,我们发现有个do while,如果CAS失败 ...

  8. Java多线程之CAS深入解析

    Java多线程之CAS深入解析 目录: CAS是什么 CAS底层原理Unsafe深入解析 CAS缺点 引子:蚂蚁花呗一面:讲一讲AtomicInteger,为什么要用CAS而不是synchronize ...

  9. Java多线程之Semaphore用法

    Java多线程之Semaphore用法 本文目录: Semaphore基本概念 Semaphore使用案例:3个停车位,6辆车去抢,走一辆,抢一个停车位. 1. Semaphore基本概念 在信号量上 ...

最新文章

  1. cocos2d_x_03_经常使用类的使用_事件_画图
  2. gitstack连接詹金斯_詹金斯的Maven报告
  3. 15天内数据迁移!广东省能源局发布通知,这类数据中心面临停工风险!
  4. 带你们了解数据安全探索者之路
  5. 配置oracle驱动_Myeclipse中添加Oracle
  6. 如何在dw上编写php_用dw制作php网站视频教程
  7. 内存泄露从入门到精通三部曲之排查方法篇
  8. 为何Spark更高效?
  9. java报错空指针异常_java – 空指针异常错误,没有明显的代码错误
  10. JQuery下锚点的平滑跳转
  11. iOS7应用开发3、Objective-C
  12. 计算机课程表教案,计算机专业课程表
  13. C++知识点(三)函数
  14. 网站被黑提醒该站点可能受到黑客攻击,部分页面已被非法篡改
  15. 一个不用背单词的高效英文学习法
  16. 单片机温度传感器c语言编码,温度传感器代码解析Ⅱ
  17. python plt 内存_python-创建matplotlib图形后如何释放内存
  18. 基于PHP的聚合数据车辆违章查询接口调用代码示例
  19. linux系统下如何修改开机图片,Ubuntu Kylin下修改登录背景,用户头像,开机动画及自动更换壁纸...
  20. win10子系统ubuntu18安装到其他盘

热门文章

  1. 【转】Spring 4.x实现Restful web service
  2. 如何通过网络,辨别数字世界的真假
  3. 使用pecl安装qqwry
  4. Data Structures with C++ Using STL Chapter 3算法概述---笔记
  5. [Dnode]基于Node.js给浏览器提供异步远程方法调用
  6. java 代码效率_Java效率
  7. Arduino可穿戴开发入门教程Arduino开发环境介绍
  8. iOS 10应用开发基础教程
  9. Xamarin iOS教程之进度条和滚动视图
  10. layui 自定义排序_浅谈layui中table的sort排序