Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2
项目需求需要多线程执行计算任务,主线程要等所有线程执行完毕,记录执行结果。另外要控制并行线程数量,防止用光内存。实现测试代码如下。
测试代码如下:
public class ThreadsTest {public static ExecutorService exec;public static void main(String[] args) throws WriteException, IOException {// 线程池exec = Executors.newCachedThreadPool();// 只能2个线程同时访问final Semaphore semp = new Semaphore(2);// 模拟10个客户端访问for (int i=0;i<10;i++) {Runnable run = new Runnable() {@Overridepublic void run() {try {// 获取许可semp.acquire();for(int j=0; j<6;j++){Thread.sleep(100);System.out.println("--------j----threadName-----" + j + "====" + Thread.currentThread().getName());}// 访问完后,释放semp.release();//availablePermits()指的是当前信号灯库中有多少个可以被使用System.out.println("-----------------" + semp.availablePermits());} catch (InterruptedException e) {e.printStackTrace();}}};exec.execute(run);}exec.shutdown();System.out.println("------------都结束了?????????------------");while(true){try{Thread.sleep(100);if(exec.isTerminated()){System.out.println("都结束了!");break;}}catch(Exception e){e.printStackTrace();}}}}
实际输出如下;
------------都结束了?????????------------
--------j----threadName-----0====pool-1-thread-1
--------j----threadName-----0====pool-1-thread-2
--------j----threadName-----1====pool-1-thread-1
--------j----threadName-----1====pool-1-thread-2
--------j----threadName-----2====pool-1-thread-1
--------j----threadName-----2====pool-1-thread-2
--------j----threadName-----3====pool-1-thread-1
--------j----threadName-----3====pool-1-thread-2
--------j----threadName-----4====pool-1-thread-2
--------j----threadName-----4====pool-1-thread-1
--------j----threadName-----5====pool-1-thread-1
--------j----threadName-----5====pool-1-thread-2
-----------------2
-----------------2
--------j----threadName-----0====pool-1-thread-5
--------j----threadName-----0====pool-1-thread-3
--------j----threadName-----1====pool-1-thread-5
--------j----threadName-----1====pool-1-thread-3
--------j----threadName-----2====pool-1-thread-5
--------j----threadName-----2====pool-1-thread-3
--------j----threadName-----3====pool-1-thread-3
--------j----threadName-----3====pool-1-thread-5
--------j----threadName-----4====pool-1-thread-3
--------j----threadName-----4====pool-1-thread-5
--------j----threadName-----5====pool-1-thread-5
--------j----threadName-----5====pool-1-thread-3
-----------------1
-----------------1
--------j----threadName-----0====pool-1-thread-4
--------j----threadName-----0====pool-1-thread-6
--------j----threadName-----1====pool-1-thread-4
--------j----threadName-----1====pool-1-thread-6
--------j----threadName-----2====pool-1-thread-4
--------j----threadName-----2====pool-1-thread-6
--------j----threadName-----3====pool-1-thread-6
--------j----threadName-----3====pool-1-thread-4
--------j----threadName-----4====pool-1-thread-4
--------j----threadName-----4====pool-1-thread-6
--------j----threadName-----5====pool-1-thread-6
-----------------1
--------j----threadName-----5====pool-1-thread-4
-----------------1
--------j----threadName-----0====pool-1-thread-7
--------j----threadName-----0====pool-1-thread-8
--------j----threadName-----1====pool-1-thread-7
--------j----threadName-----1====pool-1-thread-8
--------j----threadName-----2====pool-1-thread-7
--------j----threadName-----2====pool-1-thread-8
--------j----threadName-----3====pool-1-thread-8
--------j----threadName-----3====pool-1-thread-7
--------j----threadName-----4====pool-1-thread-8
--------j----threadName-----4====pool-1-thread-7
--------j----threadName-----5====pool-1-thread-8
--------j----threadName-----5====pool-1-thread-7
-----------------1
-----------------1
--------j----threadName-----0====pool-1-thread-10
--------j----threadName-----0====pool-1-thread-9
--------j----threadName-----1====pool-1-thread-9
--------j----threadName-----1====pool-1-thread-10
--------j----threadName-----2====pool-1-thread-10
--------j----threadName-----2====pool-1-thread-9
--------j----threadName-----3====pool-1-thread-9
--------j----threadName-----3====pool-1-thread-10
--------j----threadName-----4====pool-1-thread-9
--------j----threadName-----4====pool-1-thread-10
--------j----threadName-----5====pool-1-thread-9
-----------------1
--------j----threadName-----5====pool-1-thread-10
-----------------2
都结束了!
Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕2相关推荐
- Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕1
测试代码如下: public class ThreadsTest implements Runnable{private ExecutorService threadPool=Executors.ne ...
- 【Java并发编程】主线程等待子线程的多种方法
文章目录 1.Thread sleep() 2.Thread join() 3.synchronized 等待唤醒机制 4.ExecutorService isTerminated() + while ...
- c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划
作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...
- Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?
首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...
- Java并发编程原理与实战六:主线程等待子线程解决方案
Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...
- 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法
最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...
- 如何实现java主线程等待子线程执行完毕之后再执行?
本文转自:问题:如何实现java主线程等待子线程执行完毕之后再执行? - jseven - 博客园 点击关注强哥,查看更多精彩文章呀 工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完 ...
- java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例
导读热词 实例如下: static void testLock1(){ final AtomicInteger waitCount = new AtomicInteger(30000); final ...
- java 主线程等待_Java实现主线程等待子线程
本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...
最新文章
- web页面实现地图展示,可缩放,标点并点击---使用高德地图
- python导入自定义文件_python引入导入自定义模块和外部文件的实例
- NodeManager启动流程与服务
- [css] css中最常用的字体有哪些?你是怎么选择字体的?
- ThinkPHP6项目基操(3.控制器获取请求参数)
- FPGA设计注意事项
- 在Node.js中操作文件系统(一)
- scala文件通过本地命令运行
- Adobe将支持HTTP流媒体直播 预示着ipad将可以用flash吗?
- Raspberry Pi Zero W 安装配置
- 新导智能融合定位可视化物联系统
- 京东模拟扫码登陆破解-爬虫
- MaxCompute 助力衣二三构建智能化运营工具
- 头晕和眩晕是怎样的感觉?3件小事来缓解!
- 基于Echarts+HTML5可视化数据大屏展示—大数据统计展示大屏
- 【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案
- 那些在开源世界顶半边天的女同胞们
- Linux 文件管理 : patch 命令详解
- 深度学习技巧之Early Stopping(早停法)
- acwing 105 七夕祭 中位数 + 前缀和 贪心