import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* 线程池
* @author jynine
*
*/
public class ThreadPools {
private ThreadPoolExecutor threadPool;//线程池
private Map<String, Object> objs;
private ThreadPools(){
//初始5 最大5
threadPool = new ThreadPoolExecutor(5, 5, 1,
TimeUnit.MICROSECONDS, new LinkedBlockingQueue<Runnable>());
objs =new ConcurrentHashMap<String, Object>();
}
private static ThreadPools instance = new ThreadPools();
/**
* 获取单例对象
* @return
*/
public static ThreadPools getInstance()
{
return instance;
}
/**
* 执行线程
* @param callCallable
* 回调任务
* @param uuid
* 唯一标识
* @throws ExecutionException
* @throws InterruptedException
*/
public void excuteThread(MyCallable callable,String uuid) throws InterruptedException, ExecutionException{
Future<Object> future = threadPool.submit(callable);
Object reObjs = future.get();
objs.put(uuid, reObjs);
}
/**
* 得到线程池返回值
* @param uuid 唯一标识
* @return
* @throws InterruptedException
*/
public Object getReturnObjs(String uuid) throws InterruptedException{
long st = System.currentTimeMillis();
while (true) {
Object temp = objs.get(uuid);
if(temp != null){
objs.remove(uuid);
return temp;
}else{
//15秒超时
if((System.currentTimeMillis() - st) > 15 * 1000){
return null;
}else{
Thread.sleep(1000);
}
}
}
}
/**
* 关闭线程池
* @throws Exception
*/
public void shutDown() throws Exception{
threadPool.shutdown();
}
}
import java.util.concurrent.Callable;
/**
* 回调任务
* @author jynine
*
*/
public class MyCallable implements Callable<Object> {
private int index;
public MyCallable(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
@Override
public Object call() throws Exception {
return "call"+index;
}
}
分享到:
相关推荐
主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下
简单的线程池程序+中文文档 包结构: com.tangkai.threadpool --SimpleThread.java 工作线程 --TestThreadPool.java 程序入口 --ThreadPoolManager.java 线程池管理类
java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java...
java 线程池 完整 源码 java 线程池 完整 源码
2.然后根据提示运行java命令执行示例程序,观看线程池的运行结果 目标:Java中多线程技术是一个难点,但是也是一个核心技术。因为Java本身就是一个多线程语言。本人目前在给46班讲授Swing的网络编程--使用Swing来...
JAVA线程池原理以及几种线程池类型介绍
Reference: 《创建Java线程池》[1],《Java线程:新特征-线程池》[2], 《Java线程池学习》[3],《线程池ThreadPoolExecutor使用简介》[4],《Java5中的线程池实例讲解》[5],《ThreadPoolExecutor使用和思考》[6] ...
java 线程池 java 线程池 java 线程池 java 线程池
java多线程,对多线程,线程池进行封装,方便使用
java实现--企业微信回调配置案例及工具代码
本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...
JAVA线程池原理以及几种线程池类型介绍
Java面试如何用Java实现一个回调函数
java实现通用的线程池,这是我网上找的资料,O(∩_∩)O~希望大家能用的到。
java 回调函数 自己模拟实现 使用了接口来完成
java线程池封装j
Java多线程实现 自定义 的 回调函数. 手写 完成,亲测 完成,可以 直接运行,Demo ,具有一定参考价值,供大家阅读 下载,谢谢
JAVA使用线程池查询大批量数据
什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而...3.提高线程的可管理性,根据系统的承受能力,调整线程池中工作线程的数目,防止消耗过多的内存,导致服务器死机
给初学者的java回调demo,有了这篇demo,朋友们能更好地了解java的回调机制,也能手动debug。