Callable线程
写一个Callable线程
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
public class SaveGameCallable implements Callable<HashMap<String, Object>> { private List<Phone> phoneList;
private HashMap<String, Object> data; public List<Phone> getPhoneList() {
return phoneList;
} public void setPhoneList(List<Phone> phoneList) {
this.phoneList = phoneList;
} public SaveGameCallable(List<Phone> phoneList, HashMap<String, Object> data) {
super();
this.phoneList = phoneList;
this.data = data;
} @Override
public HashMap<String, Object> call() throws Exception {
List<Map<String, Object>> userGameList = new LinkedList<Map<String, Object>>();
int size = phoneList.size();
UserService userService = (UserService) BeanUtil.getBean("userService"); for (int j = 0; j < size; j++) {
Thread.sleep(50);
Phone phonexx = phoneList.get(j);
String mobilephone = phonexx.getMobilePhone();
if(StringUtil.isBlank(mobilephone)){
continue;
} User user = userService.getUserByPhone(mobilephone); if(user != null && !user.equals("")){
Map<String, Object> map = new HashMap<String, Object>(20);
map.put("success","true");
if (StringUtil.isNotBlank(user.getCardId())) {
//前六位置为*,7-14与17位显示 ,其他都为*
map.put("idnumber", "******" + user.getCardId().substring(6, 14) + "**" + user.getCardId().substring(16, 17) + "*");
} else {
map.put("idnumber", "");//前六位置为*,7-14与17位显示 ,其他都为*
}
userGameList.add(map);
data.put("userGameList", userGameList);
}else{
data.put("errorCode", "该手机号【"+mobilephone+"】用户不存在!");
}
}
return data;
} }
调用Callable线程:
public void getBorrowTenderLog() {
try{
//调用线程处理
ExecutorService exec = Executors.newCachedThreadPool();
try {
Future<HashMap<String, Object>> result = exec.submit(new BorrowTenderLogCallable(phoneModel.getPhone(), (HashMap<String, Object>) data));
data = result.get();
} catch (Exception e1) {
e1.printStackTrace();
} finally {
exec.shutdown();
}
LOGGER.info("【获取日志信息: 】"+getStringOfJpaObj(data));
printWebJson(getStringOfJpaObj(data));
data.clear();
//优化JVM年轻代资源释放速度
data = null;
} catch (Exception e) {
LOGGER.error(e.getMessage());
e.printStackTrace();
}
}
Callable线程的更多相关文章
- Future Callable 线程池 例1
package com.niewj.concurrent; import java.util.concurrent.Callable; import java.util.concurrent.Exec ...
- 深入Callable及Runnable两个接口 获取线程返回结果
今天碰到一个需要获取线程返回结果的业务场景,所以了解到了Callable接口. 先来看下下面这个例子: public class ThreadTest { public static void mai ...
- JavaSE---多线程---Callable、Future
1.概述 1.1 JDK1.5后,Java提供了Callable接口,该接口提供一个call方法作为线程执行体,该call方法可以 有返回值.声明抛出异常: 因此,我们可以直接将Callable接口 ...
- Callable创建线程
(1)Callable接口更像是Runnable接口的增强版,相比较Runable接口,Call()方法新增捕获和抛出异常的功能;Call()方法可以返回值<br> (2)Future接口 ...
- Callable,阻塞队列,线程池问题
一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法 2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Call ...
- Java再学习——线程之创建
Java创建线程有两种方法,一种是继承Thread,另一种实现Runnable或Callable接口. 一,继承Thread public class APP { public static void ...
- java线程学习(一)
1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...
- java异步线程池同时请求多个接口数据
一.主要使用类 . ExecutorService java线程池类 申明方式:ExecutorService exc = Executors.newFixedThreadPool(requestPa ...
- java多线程创建-Thread,Runnable,callable和threadpool
java创建多线程的方式有许多种,这里简要做个梳理 1. 继承Thread类 继承java.lang.Thread类,创建本地多线程的类,重载run()方法,调用Thread的方法启动线程.示例代码如 ...
随机推荐
- (转)Spring的概述
http://blog.csdn.net/yerenyuan_pku/article/details/69663685 Spring的概述 什么是Spring 据度娘所载: Spring是一个开源框架 ...
- mysql踩坑记录之limit和sum函数混合使用问题
问题复盘本次复盘会用一个很简单的订单表作为示例. 数据准备订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID) CREATE TABLE `order` ( `i ...
- 717. 1-bit and 2-bit Characters@python
We have two special characters. The first character can be represented by one bit 0. The second char ...
- C和C++中动态链接库的创建和链接(原创,装载请注明原处)
C和C++中动态链接库的创建和链接 1.创建DLL(动态链接库)-C++方式 1.创建DLL(动态链接库-C++方式) 1.在VS(以VS2017为例)中创建DLL动态链接库. 解决方案名称为:MyD ...
- Go:类型断言
一.基本介绍 类型断言:由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言. 如果希望将一个空接口类型重新转换成对应的类型,那么需要使用类型断言,能转换成功是因为这个空接口原先 ...
- Servlet+JSP教程之:第一个Web程序
我们知道当浏览器发送请求给服务器后,服务器会调用并执行对应的逻辑代码进行请求处理.逻辑代 码是由程序员自己编写然后放进服务器进行运行,其实就是Servlet程序. 第一个Web程序: 开发工具: My ...
- Numpy的基本操作和相关概念(一)
基础操作 np.random.randn() 符合正态分布的数据 np.vstack((a,b)) 矩阵水平拼接 np.hstack((a,b)) 矩阵垂直拼接 np.dot(a,c) 点阵积 A@B ...
- LeetCode (32) Longest Valid Parentheses
题目 Given a string containing just the characters '(' and ')', find the length of the longest valid ( ...
- Haybale Stacking(差分数组 + 求中位数的一些方法 + nth_element)
题意: 给定N个初始值为0的数, 然后给定K个区间修改(区间[l,r] 每个元素加一), 求修改后序列的中位数. 分析: K个离线的区间修改可以使用差分数组(http://www.cnblogs.co ...
- 单机安装hadoop集群
一 .安装前准备 1.VMware虚拟内容 2.Linux系统 (CentOS-6.9-min) 镜像文件http://vault.centos.org/ 3.jdk 1.8 rpm或bin文件 ht ...