ScheduledExecutorService调度线程池运行几次后停止某一个线程
时间:2019-09-08
本文章向大家介绍ScheduledExecutorService调度线程池运行几次后停止某一个线程,主要包括ScheduledExecutorService调度线程池运行几次后停止某一个线程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
开发中偶尔会碰到一些轮询需求,比如我碰到的和银行对接,在做完某一个业务后银行没有同步给到结果,这时候就需要查询返回结果,我们的需求是5分钟一次,查询3次,3次过后如果没有结果则T+1等银行的文件,对于这种任务我们的要求是轮询不是很严格,所以我采取调度线程池方式,如果有查询任务,加入线程池,设置好执行次数及执行时间间隔,具体代码如下:
1 import org.junit.Test; 2 import org.slf4j.Logger; 3 import org.slf4j.LoggerFactory; 4 5 import java.util.concurrent.*; 6 7 8 public class LocalTest { 9 10 private static final Logger log = LoggerFactory.getLogger(LocalTest.class); 11 12 @Test 13 public void test01() throws InterruptedException { 14 ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); 15 ConcurrentHashMap<String, Future> futureMap = new ConcurrentHashMap<>(); 16 17 JobTest jobTest1 = new JobTest("job1",futureMap); 18 Future future1 = executorService.scheduleAtFixedRate(jobTest1,1, 5, TimeUnit.SECONDS); 19 futureMap.put(jobTest1.getJobId(),future1); 20 21 JobTest jobTest2 = new JobTest("job2",futureMap); 22 Future future2 = executorService.scheduleAtFixedRate(jobTest2,1, 5, TimeUnit.SECONDS); 23 futureMap.put(jobTest2.getJobId(),future2); 24 25 Thread.sleep(1000L * 30); 26 27 JobTest jobTest3 = new JobTest("job3",futureMap); 28 Future future3 = executorService.scheduleAtFixedRate(jobTest3,1, 5, TimeUnit.SECONDS); 29 futureMap.put(jobTest1.getJobId(),future3); 30 31 JobTest jobTest4 = new JobTest("job4",futureMap); 32 Future future4 = executorService.scheduleAtFixedRate(jobTest4,1, 5, TimeUnit.SECONDS); 33 futureMap.put(jobTest4.getJobId(),future4); 34 35 Thread.sleep(1000L * 300); 36 executorService.shutdown(); 37 } 38 39 @Test 40 public void test02() { 41 42 } 43 44 class JobTest implements Runnable { 45 46 private ConcurrentHashMap<String, Future> futureMap; 47 private int count = 0; 48 private String jobId; 49 50 public JobTest(){ 51 52 } 53 54 public JobTest(String jobId, ConcurrentHashMap<String, Future> futureMap) { 55 super(); 56 this.jobId = jobId; 57 this.futureMap = futureMap; 58 } 59 60 @Override 61 public void run() { 62 count++; 63 log.info("{} count is {}", jobId, count); 64 if (count > 2) { 65 Future future = futureMap.remove(jobId); 66 future.cancel(true); 67 log.info("{} had cancel", jobId); 68 } 69 } 70 71 public String getJobId() { 72 return jobId; 73 } 74 75 public void setJobId(String jobId) { 76 this.jobId = jobId; 77 } 78 79 public ConcurrentHashMap<String, Future> getFutureMap() { 80 return futureMap; 81 } 82 83 public void setFutureMap(ConcurrentHashMap<String, Future> futureMap) { 84 this.futureMap = futureMap; 85 } 86 } 87 }
由于任务是放在队列,在内存里面,所以应用重启会导致任务丢失,如果对于严格要求轮询查询的不合适用这种方式
原文地址:https://www.cnblogs.com/llf369/p/11485604.html
- P1903 【模板】分块/带修改莫队(数颜色)
- 前端如何获取http状态码400的返回值
- 不确定行数的多行文本垂直水平居中的css
- Vue slot简单理解
- css实现图片横向排列滚动
- windows下nvm安装node之后npm命令找不到问题解决办法
- 元素加了position:absolute则该元素的text-align:center居中失效的解决办法
- Chrome设置断点的各种姿势
- React-native踩坑小记
- 带修改莫队算法
- P2590 [ZJOI2008]树的统计
- #103. 子串查找
- P2051 [AHOI2009]中国象棋
- P2216 [HAOI2007]理想的正方形(二维RMQ)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript开发中的常用代码参考
- rabbitmq主题订阅
- AI算法让图片动起来,深情演唱Unravel
- python 学习笔记(1)——python中的lambda函数用法
- SpringBoot过滤器的简单使用
- SpringBoot拦截器的简单使用
- dotNET Core:编码规范
- K8s——Ingress-nginx原理及配置
- Java的类加载器
- 如何启动HiveServer2
- dotnet 如何调试 SmartSql 的实际执行 SQL 语句
- dotnet 关于 SmartSql 的 SQL 语句的属性替换前缀说明
- 为什么java初学者要学习一点前端技术?
- Expedition (POJ 2431)
- java JVM 报C [libresolv.so.2+0x7e7d] __libc_res_nquery+0x4dd 解决