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. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  2. appium_v1.4.16版本自动化适配android7.0系统

    https://www.cnblogs.com/imlvbu/p/7127940.html 要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAI ...

  3. 在elasticsearch里如何高效的使用filter

    今天在做查询category的时候,遇到一个问题,查询出来的cateogry为food,fun的形式.但是我需要的只是food或者fun 不包含逗号. 开始想着在aggs后再做过滤,这样有些麻烦.遂在 ...

  4. IDEA如何打包可运行jar的一个问题

    转载:http://bglmmz.iteye.com/blog/2058785 背景: 有时候,我们会用IDEA来开发一些小工具,需要打成可运行的JAR包:或者某些项目不是WEB应用,纯粹是后台应用, ...

  5. 阻止右键菜单(阻止默认事件)&&跟随鼠标移动(大图展示)&&自定义右键菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Windows 用VS编译libevent源码

    原理:从github上克隆libevent源码,然后使用cmake生成VS工程 github 上 libevent项目地址:https://github.com/libevent/libevent 第 ...

  7. 单例模式 - GCD 、兼容ARC和MRC

    单例模式 - GCD .兼容ARC和MRC 单例模式的作用: 1,能够保证在程序执行过程.一个类仅仅有一个实例,并且该实例易于供外界訪问 2,从而方便地控制了实例个数,并节约系统资源 单例模式的使用场 ...

  8. UE4射击小游戏原型

    尝试使用了下blueprint,不知道是bug还是不熟悉,blueprint有些地方运行的跟逻辑不太一样.不管ue4目前,快速做原型倒是蛮方便的.就等着官方发更多教程讲述关于新的matinee,Nav ...

  9. JavsScript中DOM的基本操作

    节点及其类型 元素节点 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 文本节点: 是元素节点的子节点, 其内容为文本. 在 html 文档的什么位置编写 js 代码 直接在 html 页面 ...

  10. R语言初识

    # 创建数据集&基本数据管理1.向量 创建函数 c() a <- c(1,2,3,4) a[c(i,j)] :[]给定元素所处位置的数值,即向量a中第i和第j个元素,a[2]第二个元素即 ...