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. wget下载网站

    命令格式如下: wget -r -p -np -k http://URL -r:在本机建立服务器端目录结构: -p: 下载显示HTML文件的所有图片: -np:只下载目标站点指定目录及其子目录的内容: ...

  2. 了解一下运行软件的自我保护(RASP)

    看下这篇文章: http://www.jianshu.com/u/c89141b2d51e 相应的demo演示: https://github.com/xbeark/javaopenrasp

  3. 超级惊艳 10款HTML5动画特效推荐[转]

    ylbtech_html5_demo 今天我们要来推荐 10 款超级惊艳的 HTML5 动画特效,有一些是基于 CSS3 和 jQuery 的,比较实用,特别是前几个 HTML5 动画,简直酷毙了,现 ...

  4. 报错kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 26s

    近期在服务器跑大量高负载程序,造成cpu soft lockup.如果确认不是软件的问题. 解决办法: #追加到配置文件中 echo 30 > /proc/sys/kernel/watchdog ...

  5. asp.net敏感词过滤

    敏感词过滤是一个能够让用户发表评论的网站的一个很重要的功能(你懂的~) 下面开始全套流程: 1.需要有一套比较完整的词库,由于我的词库很少所以就不贴上来了,网上找找应该很多 2.设计一个可以将词库导入 ...

  6. WordPress安全检测工具

    Wordpres是一款非常流行cms系统,市面上有相当一部分的博客和站点都是使用wordpress搭建.正因为大多博客都使用wordpress,所以其安全性就显得尤为重要. 我们平时维护一个站点(不仅 ...

  7. pip 安装自己开发模块 边调试边修改

    pip install -e /path/to/mypackage

  8. Vector的一种实现(二)

      增加了逆置迭代器的实现 以及swap功能   完整代码如下: #ifndef VECTOR_H_ #define VECTOR_H_ #include <stddef.h> #incl ...

  9. JVM源码分析之FinalReference完全解读

    Java对象引用体系除了强引用之外,出于对性能.可扩展性等方面考虑还特地实现了4种其他引用:SoftReference.WeakReference.PhantomReference.FinalRefe ...

  10. TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)

    建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...