写一个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线程的更多相关文章

  1. Future Callable 线程池 例1

    package com.niewj.concurrent; import java.util.concurrent.Callable; import java.util.concurrent.Exec ...

  2. 深入Callable及Runnable两个接口 获取线程返回结果

    今天碰到一个需要获取线程返回结果的业务场景,所以了解到了Callable接口. 先来看下下面这个例子: public class ThreadTest { public static void mai ...

  3. JavaSE---多线程---Callable、Future

    1.概述 1.1 JDK1.5后,Java提供了Callable接口,该接口提供一个call方法作为线程执行体,该call方法可以  有返回值.声明抛出异常: 因此,我们可以直接将Callable接口 ...

  4. Callable创建线程

    (1)Callable接口更像是Runnable接口的增强版,相比较Runable接口,Call()方法新增捕获和抛出异常的功能;Call()方法可以返回值<br> (2)Future接口 ...

  5. Callable,阻塞队列,线程池问题

    一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法   2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Call ...

  6. Java再学习——线程之创建

    Java创建线程有两种方法,一种是继承Thread,另一种实现Runnable或Callable接口. 一,继承Thread public class APP { public static void ...

  7. java线程学习(一)

    1.简介 java基础知识部分线程创建的三种方式.线程执行的样例. 代码地址:http://git.oschina.net/blue_phantom/javaj 包位置:package com.blu ...

  8. java异步线程池同时请求多个接口数据

    一.主要使用类 . ExecutorService java线程池类 申明方式:ExecutorService exc = Executors.newFixedThreadPool(requestPa ...

  9. java多线程创建-Thread,Runnable,callable和threadpool

    java创建多线程的方式有许多种,这里简要做个梳理 1. 继承Thread类 继承java.lang.Thread类,创建本地多线程的类,重载run()方法,调用Thread的方法启动线程.示例代码如 ...

随机推荐

  1. System类与两种输入流

    1.System类对I/O的支持系统输出System.out.println 是利用了I/O流的模式完成的.实际是打印流PrintStream对象 System类中定义了三个操作的常量 1.标准/系统 ...

  2. java GZIP压缩与解压缩

    1.GZIP压缩 public static byte[] compress(String str, String encoding) { if (str == null || str.length( ...

  3. Kubernetes 架构(下)【转】

    上一节我们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点. Node 是 Pod 运行的地方,Kubernetes 支持 Docker.rkt 等容器 Run ...

  4. HTML基础(五)表单

    表单的工作原理 简单来说就是客户在浏览器输入信息之后,浏览器将用户在表单中的数据进行打包发送给服务器,服务器接收到之后进行处理,如下图 语法 <form> 表单元素</form> ...

  5. JS 数组间的操作

    JS 数组间的操作(交集,并集.差集) 以下是js数组之间常用的操作,如交集,并集.差集等. 迭代 each是一个集合迭代函数,可以将一个函数作为参数和一组可以选的参数.依次将集合的每一个元素和可选参 ...

  6. sqlserver生成脚本

    1.只生成数据 2.只生成架构 3.生成数据和架构

  7. 微信小程序之裁剪图片成圆形

    前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆形,主 ...

  8. (9) openssl enc(对称加密)

    对称加密工具,了解对称加密的原理后就很简单了,原理部分见下文. openssl   enc  -ciphername   [-in filename]   [-out filename]   [-pa ...

  9. Java后端技术微信交流群!工作、学习、技术、资源等!期待你的加入!

    <Java后端技术>专注Java相关技术:SSM.Spring全家桶.微服务.MySQL.MyCat.集群.分布式.中间件.Linux.网络.多线程,偶尔讲点运维Jenkins.Nexus ...

  10. 移动web touch事件

    参考:http://www.cnblogs.com/dojo-lzz/p/5452575.html wap中的原生touch 事件,touchstart.touchmove.touchend.touc ...