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 带返回结果的更多相关文章

  1. JAVA 线程池之Callable返回结果

    本文介绍如何向线程池提交任务,并获得任务的执行结果.然后模拟 线程池中的线程在执行任务的过程中抛出异常时,该如何处理. 一,执行具体任务的线程类 要想 获得 线程的执行结果,需实现Callable接口 ...

  2. 手写一个线程池,带你学习ThreadPoolExecutor线程池实现原理

    摘要:从手写线程池开始,逐步的分析这些代码在Java的线程池中是如何实现的. 本文分享自华为云社区<手写线程池,对照学习ThreadPoolExecutor线程池实现原理!>,作者:小傅哥 ...

  3. Linux简单线程池实现(带源码)

    这里给个线程池的实现代码,里面带有个应用小例子,方便学习使用,代码 GCC 编译可用.参照代码看下面介绍的线程池原理跟容易接受,百度云下载链接: http://pan.baidu.com/s/1i3z ...

  4. Java 线程池Future和FutureTask

    Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务. Future接口源码: public interface Future<V> ...

  5. Java:多线程,线程池,使用CompletionService通过Future来处理Callable的返回结果

    1. 背景 在Java5的多线程中,可以使用Callable接口来实现具有返回值的线程.使用线程池的submit方法提交Callable任务,利用submit方法返回的Future存根,调用此存根的g ...

  6. Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)

    多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线 ...

  7. java多线程系列六、线程池

    一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池. 2. 使用线程池的好处 a) 降低资源的消耗.使用线程池不用频繁的创建线程和销毁线程 b) 提高响应速度,任 ...

  8. Java进阶——— 线程池的原理分析

    前言 在了解线程池之前,其实首先出现的疑问是:为什么要使用线程池,其次是了解什么是线程池,最后是如何使用线程池,带着疑问去学习. 为什么要使用 前面多线程文章中,需要使用线程就开启一个新线程,简单方便 ...

  9. 死磕 java线程系列之自己动手写一个线程池(续)

    (手机横屏看源码更方便) 问题 (1)自己动手写的线程池如何支持带返回值的任务呢? (2)如果任务执行的过程中抛出异常了该怎么处理呢? 简介 上一章我们自己动手写了一个线程池,但是它是不支持带返回值的 ...

随机推荐

  1. [android]加载大量图片避免OOM

    原理是事先取得图片的长宽,直接读出缩略图. BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferr ...

  2. 【JPA】JPA的注解@MappedSuperclass作用解释【转】

    [代码参考地址]:GitHub地址 [原文地址][http://blog.sina.com.cn/s/blog_7085382f0100uk4p.html] [这里仅用到第三点为止] ======== ...

  3. redhat mount iso as one yum repository

    prepare redhat DVD iso rhel-server-6.4-x86_64-dvd.iso mount cd / mkdir /mnt/rhel mount -o loop rhel- ...

  4. ES,ZK,Mysql相关参数优化

    1.ES 内存调优: vi config/jvm.options -Xms16g -Xmx16g 2.Zookeeper参数配置调优 2.1\在conf目录下 vi java.env export J ...

  5. Keepalived高可用集群应用

    Keepalived高可用集群应用 1.keepalived服务说明 1.1.keepalived介绍 Keepalived是一个用C语言编写的路由软件.该项目的主要目标是为Linux系统和基于Lin ...

  6. 【共享单车】—— React后台管理系统开发手记:项目工程化开发

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  7. red5截屏

    在red5-web.xml添加 <bean id="rtmpSampleAccess" class="org.red5.server.stream.RtmpSamp ...

  8. 深入浅出java静态代理和动态代理

    首先介绍一下.什么是代理: 代理模式,是经常使用的设计模式. 特征是.代理类与托付类有同样的接口,代理类主要负责为托付类预处理消息.过滤消息.把消息转发给托付类.以及事后处理消息. 代理类和托付类,存 ...

  9. Mysql5.6压缩包安装到windows&& 卸载命令

    1.根目录下有一个my-default.ini,复制一下,重命名为my.ini,然后改一下my.ini为符合你情况的配置,一般只需要改basedir .datadir .port ,注意前边的井号去掉 ...

  10. zabbix自动发现监控远程端口

    zabbix监控远程服务器端口,simple checks是zabbix用来监控无agent的主机 脚本和模板地址: https://github.com/mikeluwen/tcpmonitor