线程池 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)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...
随机推荐
- C语言的运算符、位操作
+ - * / (加 减 乘 除) > >= < <= (大于 大于等于 小于 小于等于) == != (测试等于 测试不等于) && || ! (逻辑与 逻辑 ...
- HTML 中的 dl(dt,dd)、ul(li)、ol(li)
HTML <dl> 标签 #定义和用法 <dl> 标签定义了定义列表(definition list). <dl> 标签用于结合 <dt> (定义列表中 ...
- 【微信】微信小程序 应用内的页面跳转在添加了tab以后就跳转不成功的问题解决
在微信小程序中,本来应用页面内绑定在按钮上跳转页面可以成功,但是将页面添加在tab以后就不能实现跳转了 原本代码如下: //事件处理函数 bindViewTap: function() { wx.na ...
- python模块打包方法
http://www.jb51.net/article/92789.htm 一 首先将模块的目录结构整理如下: VASPy/ ├── LICENSE ├── MANIFEST ├── MANIFEST ...
- Makefile之字符串函数
1.subst字符串替换函数 $(subst <from>,<to>,<text>) 名称:字符串替换函数——subst. 功能:把字串<text>中的 ...
- ambari journalnode异常Can't scan a pre-transactional edit log
今天在删日志文件,不知道删错哪个地方了. 该目录下一直报错,这个日志文件增长很快, /var/log/hadoop/hdfs/ hadoop-hdfs-journalnode-xx.log 先备份/h ...
- 【Hadoop】如何形象描述大数据生态?
作者:千岁大王链接:https://www.zhihu.com/question/27974418/answer/39845635来源:知乎著作权归作者所有,转载请联系作者获得授权. Google内部 ...
- 用PHP上传文件时$_FILES中error返回值详解
用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常.$_FILES[field ...
- Python按行读取文件、写文件
Python按行读取文件 学习了:https://www.cnblogs.com/scse11061160/p/5605190.html file = open("sample.txt&qu ...
- SQL注入的几种有用办法
一.查询表中包括有多少列: 这里以DISCUZ举例说明,例如以下 select * FROM pre_forum_thread ORDER BY 80 返回,Unknown column '80' i ...