spring ThreadPoolTaskExecutor 实现线程阻塞
来源:互联网 发布:ubuntu lamp环境搭建 编辑:程序博客网 时间:2024/06/05 16:18
需求:我们知道java的thread类有join发法可让主线程阻塞直到子线程执行完毕,那么如何ThreadPoolTaskExecutor是否有功能呢?
我第一想法是ThreadPoolTaskExecutor是否有对应功能接口,找了下没找到,如果有技术大大知道的欢迎补充
既然没有那就自己实现一个,
有CountDownLatch可用,一个倒数计算器,只需在子线程每次只需完成后将计算器减一,CountDownLatch就可以阻塞当前线程,直到倒数计数器倒数到0 。
线程类
import java.util.List;import java.util.concurrent.CountDownLatch;public class TreadCase implements Runnable { private List<Integer> returnIds; private CountDownLatch countDownLatch; public TreadCase(List<Integer> returnIds, CountDownLatch countDownLatch) { this.returnIds = returnIds; this.countDownLatch = countDownLatch; } public void run() { for (Integer returnId :returnIds) { System.out.println("富友代扣线程类启动 id="+returnId); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("富友代扣线程类关闭 "); } countDownLatch.countDown(); System.out.println("countDownLatch="+countDownLatch.getCount()); }}
测试类
import java.util.ArrayList;import java.util.Arrays;import java.util.Date;import java.util.List;import java.util.concurrent.CountDownLatch;import org.apache.commons.collections.CollectionUtils;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;public class TestCase { private static ThreadPoolTaskExecutor threadPoolTest = new ThreadPoolTaskExecutor(); public static void main(String[] args) { threadPoolTest.initialize(); List<List<Integer>> idList = new ArrayList<List<Integer>>(); idList.add(new ArrayList<Integer>(Arrays.asList(1,2,3))); idList.add(new ArrayList<Integer>(Arrays.asList(4,5))); // 创建一个初始值为2的倒数计数器 CountDownLatch countDownLatch = new CountDownLatch(idList.size()); System.out.println("自动扣款多线开启" + new Date()); for (List<Integer> idListSub : idList) { if (CollectionUtils.isEmpty(idListSub)) continue; TreadCase thread = new TreadCase(idListSub, countDownLatch); threadPoolTest.execute(thread); } // 阻塞当前线程,直到倒数计数器倒数到0 try { countDownLatch.await(); } catch (Exception e) { e.printStackTrace(); } System.out.println("自动扣款多线程结束" + new Date()); // threadPool.destroy(); }}
阅读全文
0 0
- spring ThreadPoolTaskExecutor 实现线程阻塞
- spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
- spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
- spring线程池ThreadPoolTaskExecutor与阻塞队列BlockingQueue
- Spring ThreadPoolTaskExecutor线程池
- Spring线程池ThreadPoolTaskExecutor
- spring线程池ThreadPoolTaskExecutor
- spring线程池ThreadPoolTaskExecutor
- Spring线程池ThreadPoolTaskExecutor
- 使用Spring中的线程池ThreadPoolTaskExecutor实现JAVA并发
- 使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发
- 使用SPRING中的线程池ThreadPoolTaskExecutor实现JAVA并发
- 使用SPRING中的线程池ThreadPoolTaskExecutor实现并发
- spring ThreadPoolTaskExecutor的线程池类实现多线程
- SPRING中的线程池ThreadPoolTaskExecutor
- SPRING中的线程池ThreadPoolTaskExecutor
- SPRING中的线程池ThreadPoolTaskExecutor
- SPRING中的线程池ThreadPoolTaskExecutor
- Boost库的安装
- 从零开始学前端1
- 银行调度系统
- layer.js源码分析
- mysql系统时间获取
- spring ThreadPoolTaskExecutor 实现线程阻塞
- VMware下,虚拟机时间同步设置
- LIST_HEAD_INIT分析
- hdoj2001_计算两点间的距离
- springMVC中基于token防止表单重复提交
- 数值的整数次方
- Address already in use: JVM_Bind<null>:8080错误的解决办法
- 利用ffmpeg将微信speex格式转为wav或mp3
- dubbo连接不通日志打印