博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(二十)java多线程之ScheduledThreadPoolExecutor
阅读量:5967 次
发布时间:2019-06-19

本文共 1522 字,大约阅读时间需要 5 分钟。

本人邮箱: <kco1989@qq.com>

欢迎转载,转载请注明网址
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用法系列文章.就这样了.

打赏

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

微信打赏
支付宝打赏

你可能感兴趣的文章
使用Jquery 加载页面时调用JS
查看>>
css+div+jquery弹出层
查看>>
求职相关(链接,不定期更新)
查看>>
maya pyside 多个窗口实例 报错 解决
查看>>
我的友情链接
查看>>
通知中心
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>