Timer延时任务和ScheduledThreadPool执行延时任务
*(1) Timer延时任务
**缺陷:**1、当一个Timer指定多个TimerTask时,一个TimerTask的延时可能会影响后续TimerTask的运行
- 2、当TimerTask抛出未检查异常,Timer线程将被关闭,同时也可能影响调用线程。
- 3、基于服务器绝对时间(基于绝对时间为什么是缺点??)
public class TimerTest {public static void main(String[] args) {Timer timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("开始第一个任务");try {Thread.sleep(5000);} catch(Exception e) {e.printStackTrace();}if (true) {//throw new RuntimeException("error"); // 解除注释 程序运行到此处将结束Timer线程,并抛出异常}System.out.println("结束第一个任务");}}, 1000);timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("开始第二个任务");try {Thread.sleep(5000);} catch(Exception e) {e.printStackTrace();}System.out.println("结束第二个任务");}}, 1000);System.out.println("主线程结束!"); // 因为Timer线程非后台线程,所以主线程执行完毕后jvm不会结束。}
}
(2)ScheduledThreadPool执行多线程延时任务
/** * ScheduledThreadPool执行延时任务 * 多线程执行多延时任务 * 单线程执行多延时任务 * @author yfzhangbin */
public class SchduleTest { public static void main(String[] args) { ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(2); ScheduledExecutorService singleThread = Executors.newSingleThreadScheduledExecutor(); threadPool.schedule(new MyScheduledTask("t1"), 1, TimeUnit.SECONDS); threadPool.schedule(new MyScheduledTask("t2"), 1, TimeUnit.SECONDS); // t1、t2在多个线程执行t1延时不会影响t2 singleThread.schedule(new MyScheduledTask("t3"), 1, TimeUnit.SECONDS); singleThread.schedule(new MyScheduledTask("t4"), 1, TimeUnit.SECONDS); // t3、t4 在同一线程执行t3延时会影响 t4 threadPool.shutdown(); singleThread.shutdown(); } } class MyScheduledTask implements Runnable { private String tname; public MyScheduledTask(String tname) { this.tname = tname; } @Override public void run() { System.out.println(tname+"任务开始执行"); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(tname+"任务执行完毕!!!"); } }
Timer延时任务和ScheduledThreadPool执行延时任务相关推荐
- 延时消息_Handler的消息延时是怎么实现的
消息延时做了什么特殊处理? 是发送延时,还是消息处理延时? 延时的精度如何? 通常我们使用Handler的消息延时都是调用sendMessageDelayed函数实现的,其中delayMillis是需 ...
- c语言延时函数delay_STM32中精确延时函数的实现
在与传感器或者模块的总线进行通信的时候,常常需要使用到精确延时,一般我们会封装几个常用延时函数,下面我们以STM32F103芯片为例,详细介绍一下STM32下一种精确延时函数的实现: 时钟树 下图中紫 ...
- 2毫秒c51汇编语言延时函数,单片机精确毫秒延时函数
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行. 今天主要介绍软件延时以及单片机精确毫秒 ...
- qt延时 QT中简单的延时办法
来自 http://www.qtgtk.com/qt延时-qt中简单的延时办法/ QEventLoop eventloop; QTimer::singleShot(time, &eventlo ...
- java+timer+退出,java timer 兑现在指定时间执行方法
java timer 实现在指定时间执行方法 最近在弄一个定时发送的项目,需要定时执行方法,于是用到了Timer,但是我想要的功能网络上的资源比较少,所以自己研究了一下. 下面是我写的一些代码 imp ...
- linux 内核编程 延时函数,linux中内核延时编程
#include //定义使用定时来计时的宏 #ifndef SLEEP_MILLI_SEC #define SLEEP_MILLI_SEC(nMilliSec)\ do { \ long timeo ...
- RocketMQ 延时消息的使用和延时级别的配置
1. 延时消息的使用场景 比如电商里,提交了一个订单就可以发送一个延时消息,1h后去检查这个订单的状态,如果还是未付款就取消订单释放库存. 2. 延时消息的使用限制 // org/apache/roc ...
- js延时函数_js自执行函数分享
自执行函数是从哪里了解到的呢,从学习延时器settimeout(fn,time)的时候 测试一个for循环里面加一个延时器,想要每隔一秒输出一次i for(var i=0;i<6;i++){ s ...
- 微信小程序 延时执行 延时跳转
在微信小程序开发中,经常会遇到这样的需求:当用户操作后,我们需要先提醒用户操作成功,然后再进行页面跳转,这时候我们就需要用到setTimeout()来实现. success(res){wx.showT ...
最新文章
- 100内奇数之和流程图_IATF 16949体系资料之过程流程图,收藏备用!
- 排序算法总结之归并排序
- 读书笔记-恰到好处的幸福
- iOS10 UI教程视图的边界与视图的框架
- PAT甲级1132 Cut Integer:[C++题解]
- sts引入lombok_Spring Boot中lombok的安装与使用详解
- 给websocket加入心跳包防止自动断开连接
- AK的故事之英语学习篇(mistake)
- WIFI sniffer log抓包教程
- 文件快速拷贝工具大比拼,谁是最快的复制软件
- 嵌入式思维 、不深不浅的理解
- python股票预测_利用Keras长短期记忆(LSTM)模型预测股票价格
- iOS中常用的几种延时加载/执行的处理办法
- ologit 平行线检验 brant踩坑历程not all independent variables can be retained in binary logits brant test cann
- python绘制布林带
- 电脑休眠、睡眠、待机的区别
- python for ArcGIS 绘制南京市板块地图
- SQL系列(三)SQL使用的旁枝末节
- 年薪50万的AI和年薪80万的区块链,哪一个更适合你?
- ipad协议/8.0.37/个微协议