线程池使用Callable示例【我】
实际工作中可以把下面的代码直接拿过去改改即可
package threadtest; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; public class T1 { public static void main(String[] args) throws Exception { //定义返回值集合
List<Future<Map<String, Object>>> resultList = new ArrayList();
//创建一个线程池
ExecutorService taskExecutor = Executors.newFixedThreadPool(3);
//执行多线程
for (int i = 0; i < 4; i++) {//【实际使用中,这里可以是批量数据的循环】
//定义要传入线程中的参数
HashMap<String, Object> param = new HashMap<String, Object>();
param.put("index", i);
//创建线程执行类对象
MyCallable c = new MyCallable(param);
//执行线程并获取执行结果
Future<Map<String, Object>> f = taskExecutor.submit(c);
//将执行结果存入集合
resultList.add(f);
}
//关闭线程池
taskExecutor.shutdown();
//批量处理线程执行结果
for (Future<Map<String,Object>> future : resultList) {
if (future != null);
//这个get方法会阻塞直到获取到线程的执行结果
Map<String, Object> map = future.get();
System.out.println(map);
}
}
} //自定义线程处理类
class MyCallable implements Callable<Map<String,Object>> { private HashMap<String, Object> paramMap; public MyCallable(HashMap<String, Object> paramMap) {
super();
this.paramMap = paramMap;
} //call方法的返回值可以是任意类型,和Callable<Map<String,Object>>一致即可
@Override
public Map<String, Object> call() throws Exception {
//定义返回map
HashMap<String, Object> rtnMap = new HashMap<String, Object>();
//获取参数中的内容
Integer index = (Integer) paramMap.get("index");
//处理业务逻辑
int sum = 0;
for (int i = 0; i <= index; i++) {
System.out.println("index:"+index +"--- "+i);
sum += i;
}
//返回业务逻辑结果
rtnMap.put("index", index);
rtnMap.put("sum", sum);
return rtnMap;
} }
线程池使用Callable示例【我】的更多相关文章
- 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全
1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...
- Java线程池(Callable+Future模式)
转: Java线程池(Callable+Future模式) Java线程池(Callable+Future模式) Java通过Executors提供四种线程池 1)newCachedThreadPoo ...
- java多线程(三)-Executors实现的几种线程池以及Callable
从java5开始,类库中引入了很多新的管理调度线程的API,最常用的就是Executor(执行器)框架.Executor帮助程序员管理Thread对象,简化了并发编程,它其实就是在 提供了一个中间层, ...
- JAVA 线程池之Callable返回结果
本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...
- Java线程池 / Executor / Callable / Future
为什么需要线程池? 每次都要new一个thread,开销大,性能差:不能统一管理:功能少(没有定时执行.中断等). 使用线程池的好处是,可重用,可管理. Executor 4种线程 ...
- 线程池与Callable接口
定义: 一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 使用方法 public void lockDemo() throws Inter ...
- 线程池之 Callable、Future、FutureTask
java线程中的异步和同步,并不是走路,一定要搞清楚.那么join方法嘛,就是异步变同步.线程阻塞,就再楼下一直等着它想要的状态出现喽.直接上代码,先来看Future获取线程执行结果的使用示例: pu ...
- 在线程池使用Callable和Runnable的区别以及如何关闭线程
一.区别总结: Callable定义的方法是call,而Runnable定义的方法是run. Callable的call方法可以有返回值,而Runnable的run方法不能有返回值,这是核心区别. C ...
- JUC线程池之 Callable和Future
Callable 和 Future 简介 Callable 和 Future 是比较有趣的一对组合.当我们需要获取线程的执行结果时,就需要用到它们.Callable用于产生结果,Future用于获取结 ...
随机推荐
- CDH5.16.1的Hbase1.2的G1参数配置
1 贴一下自己的G1垃圾收集器参数(region server配置了5G内存) -Xmx5g -Xms5g -XX:MaxDirectMemorySize=5g -XX:+UseG1GC -XX:+U ...
- Linux查找并杀死僵尸进程(转)
1.查看系统是否有僵尸进程 使用Top命令查找,当zombie前的数量不为0时,即系统内存在相应数量的僵尸进程. 2.定位僵尸进程 使用命令ps -A -ostat,ppid,pid,cmd |gre ...
- PAT Basic 1084 外观数列 (20 分)
外观数列是指具有以下特点的整数序列: d, d1, d111, d113, d11231, d112213111, ... 它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述. ...
- sql 语句用法
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname 3.说明:备份sql server--- 创建 ...
- pyltp安装
第一步:下载wheel文件 第二步:进入该文件的文件夹 第三步:pip install wheel文件名 注意:python的安装版本必须和pyltp的版本相同,我这版本都是pyhton3.6.之前p ...
- 洛谷P3600随机数生成器——期望+DP
原题链接 写到一半发现写不下去了... 所以orz xyz32768,您去看这篇题解吧,思路很清晰,我之前写的胡言乱语与之差距不啻天渊 #include <algorithm> #incl ...
- python-platform模块:平台相关属性
import platform x=platform.machine() #返回平台架构 #AMD64 x=platform.node() #网络名称(主机名) #DESKTOP-KIK668C x= ...
- 类数组对象HTMLCollenction
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 【ArcCatalog】
1.添加文件夹链接文件夹链接的添加删除操作 2.新建/删除数据库(1)新建个人地理数据库(.mdb)(2)新建文本地理数据库(.gdb) 3.新建/删除要素数据集(1)要素数据集属性: 常规--XY坐 ...
- code命令用vscode打开项目代码
1. 打开vscode, 使用Command + shift + p, 输入shelll 选择