线程池 Future 带返回结果
package com.aibi.cmdc.bigscreen.action; 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.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future; import com.aibi.cmdc.ws.WSConstans;
import com.aibi.cmdc.ws.WsUtil;
import com.sun.org.apache.bcel.internal.generic.NEW; public class ThreadPool { public static class MyCallable implements Callable{
private String wsClassNmae;
private Map<String, String> params = null;
private List<String> headCodes = null;
MyCallable(String wsClassNmae,Map<String, String> params,List<String> headCodes) {
this.wsClassNmae = wsClassNmae;
this.params = params;
this.headCodes = headCodes;
} @Override
public Object call() throws Exception {
return WsUtil.getData(wsClassNmae, params, headCodes, 0);
}
}
/**
* @param args
* @throws Exception
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException, Exception { ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
Map<String,String> params = new HashMap<String, String>();
params.put(WSConstans.params_month, "2015-09");
params.put(WSConstans.params_phoneType, "12170001");
List<String> headCodes = new ArrayList<String>();
headCodes.add("provinceId");//省份公司
headCodes.add("province");//省份公司
headCodes.add("channelAlarm");//渠道覆盖率预警
headCodes.add("channelBA");//渠道覆盖率
headCodes.add("custormCount");//提货客户数
headCodes.add("HisCustormCount");//历史提货客户数
Callable c1 = new MyCallable(WSConstans.CLASS_NAME_WS00131 , params, headCodes);
headCodes.clear();
headCodes.add("provinceId");//省份公司
headCodes.add("province");//省份公司
headCodes.add("alarmValue");//提货占比预警
headCodes.add("top10Value");//TOP10 占比
headCodes.add("top5Value");//Top5占比
Callable c2 = new MyCallable(WSConstans.CLASS_NAME_WS00132 , params, headCodes);
headCodes.clear();
headCodes.add("provinceId");//省份公司
headCodes.add("province");//省份公司
headCodes.add("alarmValue");//异常渠道客户预警
headCodes.add("alarmCustorm");//异常客户数
Callable c3 = new MyCallable(WSConstans.CLASS_NAME_WS00132 , params, headCodes);
Future f1 = fixedThreadPool.submit(c1);
Future f2 = fixedThreadPool.submit(c2);
Future f3 = fixedThreadPool.submit(c3);
Object re1 = f1.get();
Object re2 = f2.get();
Object re3 = f3.get();
System.out.println("1111111111");
System.out.println(re1.toString());
System.out.println("2222222222");
System.out.println(re2.toString());
System.out.println("3333333");
System.out.println(re3.toString());
} }
线程池 Future 带返回结果的更多相关文章
- JAVA 线程池之Callable返回结果
本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...
- 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理
摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...
- Linux简单线程池实现(带源码)
这里给个线程池的实现代码,里面带有个应用小例子,方便学习使用,代码 GCC 编译可用.参照代码看下面介绍的线程池原理跟容易接受,百度云下载链接: http://pan.baidu.com/s/1i3z ...
- Java 线程池Future和FutureTask
Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务. Future接口源码: public interface Future<V> ...
- Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果
1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...
- Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)
多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...
- java多线程系列六、线程池
一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ...
- Java进阶——— 线程池的原理分析
前言 在了解线程池之前,其实首先出现的疑问是:为什么要使用线程池,其次是了解什么是线程池,最后是如何使用线程池,带着疑问去学习. 为什么要使用 前面多线程文章中,需要使用线程就开启一个新线程,简单方便 ...
- 死磕 java线程系列之自己动手写一个线程池(续)
(手机横屏看源码更方便) 问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...
随机推荐
- 使用ARC也可能发生内存泄露
1,循环参照 A有个属性参照B,B有个属性参照A,如果都是strong参照的话,两个对象都无法释放. 这种问题常发生于把delegate声明为strong属性了. 例, @interface Samp ...
- 前端JavaScript实现跨域的方式(转)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- RMAN BACKUP
转自 RMAN BACKUP backup terminology Using the RMAN BACKUP Command to Create Backups Server-Managed Con ...
- api.js
ylbtech-JavaScript-util: api.js API 代理接口 1.A,JS-效果图返回顶部 1.B,JS-Source Code(源代码)返回顶部 1.B.1, m.yinta ...
- Java 7 新功能: 省略finally, 保证资源正常关闭
class MyResource implements Closeable{ @Override public void close() throw IOException{ } } try( myR ...
- 前端存储之indexedDB
在前一个阶段的工作中,项目组要开发一个平台,为了做出更好的用户体验,实现快速.高质量的交互,从而更快得到用户的反馈,要求在前端把数据存储起来,之后我去研究了下现在比较流行的前端存储数据库,找到了ind ...
- Gacutil.exe(全局程序集缓存工具)
全局程序集缓存 .NET Framework (current version) 其他版本 安装有公共语言运行时的每台计算机都具有称为全局程序集缓存的计算机范围内的代码缓存.全局程序集缓存中存储了专门 ...
- 第三章,设置button边框(Android)
这样的方法是通过层叠几个图片实现边框效果. 在res目录下的drawable目录下(没有就新建)建一个xml文件选layer-list. <?xml version="1.0" ...
- windows pip源
首先在window的文件夹窗口输入 : %APPDATA% 然后在底下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini,然后再里面输入内容 [global] timeout = 6000 ...
- InnoDB事务和锁
InnoDB支持事务,MyISAM不支持事务. 一.事务的基本特性 ACID特性 1.原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 2.一致性( ...