博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义 ForkJoinPool
阅读量:7013 次
发布时间:2019-06-28

本文共 3394 字,大约阅读时间需要 11 分钟。

hot3.png

自定义 ForkJoinPool 博客分类: java
package com.tuchaoshi.base.concurrent;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.Executors;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.google.common.collect.Lists;import com.google.common.util.concurrent.Futures;import com.google.common.util.concurrent.ListenableFuture;import com.google.common.util.concurrent.ListeningExecutorService;import com.google.common.util.concurrent.MoreExecutors;public class ForkJoinPool
{ private final static Logger logger = LoggerFactory .getLogger(ForkJoinPool.class); public static final int AVAILABLE_PROCESSORS_SIZE = Runtime.getRuntime() .availableProcessors(); private ListeningExecutorService executorService = null; private ThreadLocal
>> futuresThreadLocal = new ThreadLocal
>>(){ protected java.util.List
> initialValue() { return Lists.newArrayList(); }; }; public ForkJoinPool() { this(AVAILABLE_PROCESSORS_SIZE*2); } public ForkJoinPool(int poolSize) { executorService = MoreExecutors .listeningDecorator(Executors .newFixedThreadPool(poolSize)); } public void createTask() { } /** * * @description * @return ListenableFuture
* @Exception */ public ForkJoinPool
addTaskList(final List
> callables) { if(callables!=null){ for(Callable
c:callables){ addTask(c); } } return this; } /** * * @description * @return ListenableFuture
* @Exception */ public ForkJoinPool
addTask(final Callable
callable) { ListenableFuture
listenableFuture = executorService.submit(callable); futuresThreadLocal.get().add(listenableFuture); return this; } /** * 多线程执行商品生成信息 * * @description * @return * @Exception */ public List
executeTask(List
> futures) { long gstartTime = System.currentTimeMillis(); ListenableFuture
> successfulQueries = Futures .successfulAsList(futures); try { // 获取所有线程的执行结果 List
lists = successfulQueries.get(); return lists; } catch (Exception e) { logger.error(e.getMessage(), e); } logger.info(" executeTask ! cost time:" + (System.currentTimeMillis() - gstartTime)); return null; } /** * 多线程执行商品生成信息 * * @description * @return * @Exception */ public List
executeTask() { List
> futures = futuresThreadLocal.get(); try { return executeTask(futures); } catch (Exception e) { logger.error(e.getMessage(), e); } finally { futuresThreadLocal.remove(); } return null; } /** * 拆分任务 * * @param tasks * @param 拆分数量 * @return */ public static
List
mergeTask(List
> tasks) { if(tasks==null){ return null; } List
list = Lists.newArrayList(); for(List
l:tasks){ if(l!=null){ list.addAll(l); } } return list; } /** * 拆分任务 * * @param tasks * @param 拆分数量 * @return */ public static
List
> splitTask(List
tasks, Integer taskSize) { List
> list = Lists.newArrayList(); if(tasks==null || taskSize <= 0){ return list; } if(tasks.size() < taskSize){ list.add(tasks); return list; } int baseNum = tasks.size() / taskSize; // 每个list的最小size int remNum = tasks.size() % taskSize; // 得到余数 int index = 0; for (int i = 0; i < taskSize; i++) { int arrNum = baseNum; // 每个list对应的size if (i < remNum) { arrNum += 1; } List
ls = Lists.newArrayList(); for (int j = index; j < arrNum + index; j++) { ls.add(tasks.get(j)); } list.add(ls); index += arrNum; } return list; } public void shutdown() { this.executorService.shutdown(); }}

 

转载于:https://my.oschina.net/xiaominmin/blog/1597012

你可能感兴趣的文章
创建maven【聚合工程】
查看>>
IT兄弟连 JavaWeb教程 使用AJAX发送GET请求并获取响应
查看>>
Oschina 周六乱弹——是一个傻子还是一群傻子?
查看>>
向自由职业者强烈推荐的12本免费电子书
查看>>
tornado延时函数
查看>>
android文件系统system-ramdisk-userdata三者之间的关系
查看>>
Collection has neither generic type or OneToMany.targetEntity()
查看>>
使用webmagic抓取页面并保存为wordpress文件
查看>>
前嗅ForeSpider教程:验证码设置
查看>>
我的友情链接
查看>>
搭建LAMP环境PHP无法解析问题
查看>>
(翻译)Quartz官方教程——第十课:配置,资源使用和SchedulerFactory
查看>>
怎样去 trace sql*net
查看>>
cobbler无人值守安装CentOS7
查看>>
win 2008 c盘空间不够怎么办
查看>>
〈如何阅读一本书〉 读书笔记
查看>>
shell学习之算术运算
查看>>
VMware上多个CentOS使用宿主机上网、相互通讯
查看>>
oracle内存架构(三)
查看>>
nodejs tutorial - 2 加入模板 2015-3-23
查看>>