[原创] JAVA 递归线程池测试 ExecutorService / ForkJoinPool

测试工具使用递归的方式获取子进程的Msg消息,目前有2种常用的ExecutorService / ForkJoinPool
为了测试哪种效果较好,我们来写个测试Demo,循环5555555次+1(加锁),统计每种执行耗时
int nCpu = Runtime.getRuntime().availableProcessors();
ExecutorService executorPool = Executors.newFixedThreadPool(nCpu);
ForkJoinPool forkJoinPool = new ForkJoinPool(nCpu);
TestData:5555555 , RunTime:1543 ms :ExecutorService executorPool
TestData:5555555 , RunTime:746 ms :ForkJoinPool forkJoinPool
结果很明显,递归线程池使用ForkJoinPool更佳,2倍的执行效率
测试流程图

package test; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ForkJoinPool; /**
*
* @author weimjsam
*/
public class TestThrad { public int addNum = 0; //get cpu
int nCpu = Runtime.getRuntime().availableProcessors(); //Thread
ExecutorService taskPush = Executors.newFixedThreadPool(nCpu);
ExecutorService executorPool = Executors.newFixedThreadPool(nCpu);
ForkJoinPool forkJoinPool = new ForkJoinPool(nCpu); private void TaskPush(int iTestAdd) {
CompletableFuture.runAsync(() -> { for (int i = 0; i < nCpu; i++) {
CompletableFuture.runAsync(() -> TestRun(iTestAdd), forkJoinPool);
} }, taskPush);
} private void TestRun(int iTestAdd) {
CompletableFuture.runAsync(() -> TestAdd(iTestAdd), forkJoinPool)
.thenRun(() -> CheckOver(iTestAdd));
} private void TestAdd(int iTestAdd) {
synchronized (this) {
if (addNum < iTestAdd) {
addNum = addNum + 1;
}
}
} private void CheckOver(int iTestAdd) {
if (addNum < iTestAdd) {
TestRun(iTestAdd);
}
} public void Test(int iTestMax) {
TaskPush(iTestMax);
} }
[原创] JAVA 递归线程池测试 ExecutorService / ForkJoinPool的更多相关文章
- JAVA 递归线程池测试 ExecutorService / ForkJoinPool
测试工具使用递归的方式获取子进程的Msg消息,目前有2种常用的ExecutorService / ForkJoinPool 为了测试哪种效果较好,我们来写个测试Demo,循环5555555次+1(加锁 ...
- java 多线程 线程池:多核CPU利用ExecutorService newWorkStealingPool; ForkJoinPool线程池 执行可拆分的任务RecursiveAction;RecursiveTask
1,给定并行级别: 1,ExecutorService newWorkStealingPool(int parallelism): 创建持有足够的线程的线程池来支持给定的并行级别,该方法还会使用多个队 ...
- 转:java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例
java多线程CountDownLatch及线程池ThreadPoolExecutor/ExecutorService使用示例 1.CountDownLatch:一个同步工具类,它允许一个或多个线程一 ...
- Java中线程池,你真的会用吗?ExecutorService ThreadPoolExcutor
原文:https://www.hollischuang.com/archives/2888 在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及 ...
- java利用线程池处理集合
java利用线程池处理集合 2018年07月23日 17:21:19 衍夏成歌 阅读数:866 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/s ...
- JAVA基础—线程池
推荐文章java多线程基础 线程池概述 为什么要使用线程池 1.服务器创建和销毁工作线程的开销很大 2.如果频繁的创建和销毁线程会导致频繁的切换线程,因为一个线程被销毁后,必然要把CPU转让给另一个已 ...
- 深入理解Java之线程池(爱奇艺面试)
爱奇艺的面试官问 (1) 线程池是如何关闭的 (2) 如何确定线程池的数量 一.线程池销毁,停止线程池 ThreadPoolExecutor提供了两个方法,用于线程池的关闭,分别是shutdown() ...
- Java之线程池和Lambda表达式
线程池和lambda表达式 学习线程池和lambda表达式的理解 补充一个知识点(单例设计模式) 在多线程中,我们只需要一个任务类,为了防止创建多个任务类,这个时候就需要用到单例模式,单例模式有两种设 ...
- Java 之 线程池
一.线程池思想概述 如果使用线程的时候就去创建一个线程,这样实现起来非常简便,但是会出现一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低 ...
随机推荐
- JAVA8集合之List
目录: 一.ArrayList概述 二.ArrayList的实现 1)成员变量 2)构造方法 3)元素添加 4)元素删除 5)元素修改 6)集合容量调整 7)集合转数组 三.总结 一.ArrayLis ...
- Day03_Python知识总结
1.元组: 元组其实跟列表差不多,也是存一组数,但它一旦创建便不能修改,所以又叫只读列表. names = ("alex","jack","eric ...
- awk统计文本里某一列重复出现的次数
比如这样的场景:现在有一个文本,里面是这样的内容: NOTICE: 12-14 15:11:13: parser. * 6685 url=[http://club.pchome.net/threa ...
- 在IE浏览器中url传参长度问题
1.在这之前我一直以为,应该说是并没有去思考过,url地址传参的长度限制问题:知道在项目材料价格系统中遇到之后,才对这个问题进行了具体的探索.IE中最大的长度限制为2084个,用于get传递数据的长度 ...
- 【EMV L2】EMV终端数据
Account TypeAcquirer IdentifierAdditional Terminal CapabilitiesAmount, Authorised (Binary)Amount, Au ...
- Windows Essentials Movie Maker 安装失败报错 ——问题解决
Windows Essentials Movie Maker 安装失败报错: (软件包名: wlsetup-all.exe) 查到官方论坛给出了一些回复: https://social.technet ...
- 浅谈session和cookie
含义: session(会话):指用户登录网站后的一系列动作,比如浏览商品添加到购物车并购买 cookie:用户身份的一种标识 区别: 1.Cookie通过在客户端记录信息确定用户身份,Session ...
- SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题
问题描述: Springboot没有打成jar之前,可以成功获取读取resources目录下xxx.json文件的 路径.但是打成jar包后,接口调不通,原因是获取不到文件的路径. 原因: 在本地进行 ...
- 锋利的jQuery初学(3)
jQuery详细介绍 1,$的含义:就是一个名称符号:jquery占用了两个变量:$和jquery; 2,js与jQuery的入口函数区别 (1),js的window.onload事件是等到所有内容加 ...
- [USACO07OPEN]便宜的回文Cheapest Palindrome
字串S长M,由N个小写字母构成.欲通过增删字母将其变为回文串,增删特定字母花费不同,求最小花费. 题目描述见上 显然 这是一道区间DP 从两头DP,枚举长度啥的很套 ...