项目需求需要多线程执行计算任务,主线程要等所有线程执行完毕,记录执行结果。另外要控制并行线程数量,防止用光内存。实现测试代码如下。

测试代码如下:

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相关推荐

  1. Java多线程 信号量和屏障实现控制并发线程数量,主线程等待所有线程执行完毕1

    测试代码如下: public class ThreadsTest implements Runnable{private ExecutorService threadPool=Executors.ne ...

  2. 【Java并发编程】主线程等待子线程的多种方法

    文章目录 1.Thread sleep() 2.Thread join() 3.synchronized 等待唤醒机制 4.ExecutorService isTerminated() + while ...

  3. c++主线程等待子线程结束_简单明了的 Python 多线程来了 | 原力计划

    作者 | 万里羊责编 | 王晓曼出品 | CSDN博客线程和进程计算机的核心是CPU,它承担了所有的计算任务,就像是一座工厂在时刻运行.如果工厂的资源有限,一次只能供一个车间来使用,也就是说当一个车间 ...

  4. Java多线程之----主线程会等待子线程结束再结束么,怎么让主线程等待子线程结束呐?

    首先给出结论: 主线程和子线程之间没有谁先谁后结束这种关联,它们只是各自负责自己的线程任务,如果该线程的任务结束了,该线程自然会结束运行. talk is cheap,show me the code ...

  5. Java并发编程原理与实战六:主线程等待子线程解决方案

    Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...

  6. 【多线程】学习记录七种主线程等待子线程结束之后在执行的方法

    最近遇到一个问题需要主线程等待所有的子线程结束,才能开始执行,统计所有的子线程执行结果,返回,网上翻阅各种资料,最后记录一下,找到七种方案 第一种:while循环 对于"等待所有的子线程结束 ...

  7. 如何实现java主线程等待子线程执行完毕之后再执行?

    本文转自:问题:如何实现java主线程等待子线程执行完毕之后再执行? - jseven - 博客园 点击关注强哥,查看更多精彩文章呀 工作总往往会遇到异步去执行某段逻辑, 然后先处理其他事情, 处理完 ...

  8. java 父线程_Java父线程(或是主线程)等待所有子线程退出的实例

    导读热词 实例如下: static void testLock1(){ final AtomicInteger waitCount = new AtomicInteger(30000); final ...

  9. java 主线程等待_Java实现主线程等待子线程

    本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明: 1.使用Thread的join()方法,join()方法会阻塞主线程继续向下执行. 2.使用Java.util.concurrent中的C ...

最新文章

  1. web页面实现地图展示,可缩放,标点并点击---使用高德地图
  2. python导入自定义文件_python引入导入自定义模块和外部文件的实例
  3. NodeManager启动流程与服务
  4. [css] css中最常用的字体有哪些?你是怎么选择字体的?
  5. ThinkPHP6项目基操(3.控制器获取请求参数)
  6. FPGA设计注意事项
  7. 在Node.js中操作文件系统(一)
  8. scala文件通过本地命令运行
  9. Adobe将支持HTTP流媒体直播 预示着ipad将可以用flash吗?
  10. Raspberry Pi Zero W 安装配置
  11. 新导智能融合定位可视化物联系统
  12. 京东模拟扫码登陆破解-爬虫
  13. MaxCompute 助力衣二三构建智能化运营工具
  14. 头晕和眩晕是怎样的感觉?3件小事来缓解!
  15. 基于Echarts+HTML5可视化数据大屏展示—大数据统计展示大屏
  16. 【北亚数据恢复】不认盘的移动硬盘恢复数据案例解决方案
  17. 那些在开源世界顶半边天的女同胞们
  18. Linux 文件管理 : patch 命令详解
  19. 深度学习技巧之Early Stopping(早停法)
  20. acwing 105 七夕祭 中位数 + 前缀和 贪心

热门文章

  1. try的动词用法_try的用法都有什么
  2. 国外一个免费的基于Java的PLC梯形图逻辑编辑与仿真软件
  3. 聊聊强AI——来到治愈系空间的小茶末
  4. 阿里巴巴400集python教程_摆摊吧,程序员!阿里巴巴力荐Python400集视频
  5. 【学术相关】有什么事情是你读博以后才知道的?
  6. 完整ASCII字符表
  7. 批发进销存管理软件,商品分类管理,对商品分类批量价格管理,商品分类导入导出的操作
  8. 又一家美业SaaS+系统宣布停止服务,美业人你怎么看?
  9. WD --蓝盘绿盘黑盘红盘的区别
  10. 小红书商品详情API接口(商品详情页面数据接口)