Java 多线程并发 Future+callable 实例
需求:一个业务实现 查询, 因为 要查询十几次, 所以每个平均0.6秒, 之前只有主线程一步步查 ,结果用了10秒,效率十分低下 , 于是改用线程池并发:
以下是代码设计:
1.线程池工具类:
package cn.ycmedia.common.utils; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class ThreadPools {
private ThreadPools() { } private static final int COUNT = 10; private static ExecutorService FIXED_THREAD_POOL = null; static {
if (FIXED_THREAD_POOL == null) {
FIXED_THREAD_POOL = Executors.newFixedThreadPool(COUNT);
}
}
public static ExecutorService getExecutorService() {
return FIXED_THREAD_POOL;
} }
2.callableUtil 类
package cn.ycmedia.common.utils; import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable; import com.alibaba.fastjson.JSONObject; import cn.ycmedia.common.constants.PeopleClassEnum;
import cn.ycmedia.common.constants.PeopleEnum;
import cn.ycmedia.dao.mysql.OverviewDao;
import cn.ycmedia.model.ChartBaseBo;
import cn.ycmedia.model.overview.PerspectiveBaseBo; /**
* 获取返透视数据
* @author 朱良兴
*
*/
public class CallbleUtil implements Callable<JSONObject> { /**
* 透视类型 名称或者分类
*/
private String[] name ; /**
* 透视种类 项目透视/app 透视
*/
private Integer flag; private PeopleEnum methodName; private OverviewDao overviewDao;
@Override
public JSONObject call() throws Exception {
JSONObject json = new JSONObject();
try {
switch (methodName) {
case FINDGENDERDATA:
json.put("genderList", overviewDao.findgenderData(name, flag));
break;
case FINDAGEDATA :
json.put("ageList", overviewDao.findAgeData(name, flag));
break;
case FINDMARRYDATA:
json.put("marryList", overviewDao.findMarryData(name, flag));
break;
case FINDCONSUMPTIONCAPACITY:
json.put("consumptionCapacityList", overviewDao.findConsumptionCapacity(name, flag));
break;
case FINDINTERNETACTIVITY:
json.put("internetActivityList", overviewDao.findInternetActivity(name, flag));
break;
case FINDINTERNETACTIVETIMELIST:
json.put("internetActiveTimeList", overviewDao.findInternetActiveTimeList(name, flag));
break;
case FINDSHOPPINGPREFERENCELIST:
json.put("shoppingPreferenceList", overviewDao.findShoppingPreferenceList(name, flag));
break;
case FINDGAMEPREFERENCEDATA:
json.put("gamePreferenceList", overviewDao.findGamePreferenceData(name, flag));
break;
case FINDAPPLICATIONPREFERENCEDATA:
json.put("applicationPreferenceList", overviewDao.findApplicationPreferenceData(name, flag));
break;
case FINDMEDIAPREFERENCELIST:
json.put("mediaPreferenceList", overviewDao.findMediaPreferenceList(name, flag));
break;
case FINDMOBILEBRANDLIST:
json.put("mobileBrandList", overviewDao.findMobileBrandList(name, flag));
break;
case FINDMOBILESYSTEMLIST:
json.put("mobileSystemList", overviewDao.findMobileSystemList(name, flag));
break;
case FINDBROSWERLIST:
json.put("broswerList", overviewDao.findbroswerList(name, flag));
break;
case FINDPHONEMODEL:
json.put("phoneModel", overviewDao.findPhoneModel(name, flag));
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
public String[] getName() {
return name;
}
public void setName(String[] name) {
this.name = name;
}
public Integer getFlag() {
return flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public PeopleEnum getMethodName() {
return methodName;
}
public void setMethodName(PeopleEnum methodName) {
this.methodName = methodName;
}
public OverviewDao getOverviewDao() {
return overviewDao;
}
public void setOverviewDao(OverviewDao overviewDao) {
this.overviewDao = overviewDao;
}
public CallbleUtil(String[] name, Integer flag,
PeopleEnum methodName, OverviewDao overviewDao) {
this.name = name;
this.flag = flag;
this.methodName = methodName;
this.overviewDao = overviewDao;
} }
3.枚举类:
package cn.ycmedia.common.constants; /**
* @author 透视方法枚举
*
*/
public enum PeopleEnum {
FINDGENDERDATA,
FINDAGEDATA,
FINDMARRYDATA,
FINDCONSUMPTIONCAPACITY,
FINDINTERNETACTIVITY,
FINDINTERNETACTIVETIMELIST,
FINDSHOPPINGPREFERENCELIST,
FINDGAMEPREFERENCEDATA,
FINDAPPLICATIONPREFERENCEDATA,
FINDMEDIAPREFERENCELIST,
FINDMOBILEBRANDLIST,
FINDMOBILESYSTEMLIST,
FINDBROSWERLIST,
FINDPHONEMODEL }
4.主线程:
/**
* 根据域名获取
*
* @param name
* @param flag
* @param second
* @param first
* @return
* @throws ExecutionException
* @throws InterruptedException
*/ public List<JSONObject> getPeoplePerspective(String name, Integer flag,Integer type) throws InterruptedException, ExecutionException {
String[] nameArr = name.split(",");
ExecutorService pool=ThreadPools.getExecutorService();
List<Future<JSONObject>>results=new ArrayList<Future<JSONObject>>();
List<JSONObject> list= new ArrayList<JSONObject>();
if(type==1){
for (PeopleEnum enums:PeopleEnum.values()) {
results.add(pool.submit(new CallbleUtil(name.split(",") ,flag, enums, overviewDao)));
}
}else{
for (PeopleClassEnum enums:PeopleClassEnum.values()) {
results.add(pool.submit(new CallbelClassUtil(Integer.parseInt(name) ,flag, enums, overviewDao)));
}
} for(Future<JSONObject> fs :results) {
list.add(fs.get());
}
String audienceStr="";
String flow="";
// 受众
Long audience = 0L;
if(type==1){
audience=overviewDao.getFlow(nameArr, flag);
}else{
audience = overviewDao.getFlowClass(Integer.parseInt(name), flag);
}
if (audience != null) {
audienceStr=audience.toString();
flow=String.valueOf(overviewDao.findLiuLiang(audience));
} else {
audienceStr="--";
flow="--";
}
JSONObject audienceJ = new JSONObject();
audienceJ.put("audience", audienceStr);
JSONObject flowJ= new JSONObject();
flowJ.put("flow",flow );
list.add(flowJ);
list.add(audienceJ);
return list;
}
======================================================================
测试:
aaarticlea/png;base64,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" alt="" />
==================================1.8 秒还是可以接受的
Java 多线程并发 Future+callable 实例的更多相关文章
- java多线程系列(七)---Callable、Future和FutureTask
Callable.Future和FutureTask 前言:如有不正确的地方,还望指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量 ...
- Java 多线程并发编程一览笔录
Java 多线程并发编程一览笔录 知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run ...
- Java多线程并发技术
Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...
- 03.Java多线程并发库API使用2
1.多个线程之间共享数据的方式探讨 1.如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 2.如果每个线程执行的代 ...
- Java多线程并发04——合理使用线程池
在此之前,我们已经了解了关于线程的基本知识,今天将为各位带来,线程池这一技术.关注我的公众号「Java面典」了解更多 Java 相关知识点. 为什么使用线程池?线程池做的工作主要是控制运行的线程的数量 ...
- Java多线程并发07——锁在Java中的实现
上一篇文章中,我们已经介绍过了各种锁,让各位对锁有了一定的了解.接下来将为各位介绍锁在Java中的实现.关注我的公众号「Java面典」了解更多 Java 相关知识点. 在 Java 中主要通过使用sy ...
- Java多线程-并发容器
Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...
- java 多线程并发问题总结
java 多线程并发主要通过关键字synchronized实现 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问 ...
- 从火箭发场景来学习Java多线程并发闭锁对象
从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size—这种方式来实现.但是在多线程并发的情 ...
随机推荐
- CentOS 6.4 64位 安装 mysql 5.6.24
下载安装包 由于官网访问及版本选择下载不太方便,使用 suho 的源进行下载 http://mirrors.sohu.com/mysql/MySQL-5.6/ 下载如下三个安装包: MySQL-ser ...
- jquery 左侧展开栏目
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ES6-个人学习笔记一--let和const
es6已经推出一段时间了,虽然在兼容和应用上还有不少的难题,但是其提供的未来前端代码编程的发展趋势和一些好用的功能还是很吸引人的,因此个人买了'阮一峰'先生的es6入门,希望对其有一个了解和学习,本系 ...
- Node.js(window)基础(2)——node环境下的模块,模块间调用
参考:http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450241959 ...
- 从Image Caption Generation理解深度学习
0. 前面的话 建丁让我写一篇深度学习相关小文章,目标读者是国内的开发者.刚接到这个任务时我是颇为忐忑的,写文章要讲究厚积薄发,如果“水之积也不厚”,“则其负大舟也无力”.因为我自知水平很有限,又不是 ...
- React Native:使用 JavaScript 构建原生应用 详细剖析
数月前,Facebook 对外宣布了正在开发的 React Native 框架,这个框架允许你使用 JavaScript 开发原生的 iOS 应用——就在今天,Beta 版的仓库释出了! 基于 Pho ...
- php运用curl触发后台脚本不超时执行某项任务
运用curl 设置超时,触发后台脚本执行 例如一些需要长时间等待的任务,如创建数据库,下载网络图片等 $ch = curl_init();//$ch资源可以请求多个连接 curl_setopt($ch ...
- html5时间选择器
HTML5日期输入类型(date) 分享 分享 分享 分享 分享 在很多页面和web应用中都有输入日期和时间的地方,最典型的是订飞机票,火车票,酒店,批萨等网站. 在HTML5之前 ...
- C#让程序自动在管理员权限下运行
windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛 ...
- uitableview的空白处不能响应 touchesbegan 事件
现在的uitableview 的上面 响应不了 touchesbegan 事件 可能算是苹果的一个bug吧,不知道以后会不会改变 今天试了好久 都不行 最后 写了个字类 继承自 ...