写一个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. iOS端架构、基本组成与使用说明

    一. app整体描述 app的描述:需求文档+接口文档+程序架构. 说明:新入手的开发人员必须拿到这三个说明文档才能整体了解app功能. 二.app架构描述 1.架构视图 2.分层结构说明 [1] a ...

  2. python基础一 day2

    内容:   3%%s   输出:3%s       后面的全部转义 结果: 如果是因为执行break语句导致循环提前结束,就不会执行else. 单位换算: 编码方式: ascii  unicode u ...

  3. PHP11 日期和时间

    学习要点 UNIX时间戳 将其他格式的日期转成UNIX时间戳格式 基于UNIX时间戳的日期计算 获取并格式化输出日期 修改PHP的默认时间 微秒的使用    Unix时间戳 相关概念 Unix tim ...

  4. Maven实战读书笔记(七):Maven常用功能

    7.1.资源排除 <resources> <!-- 启动过滤,包含的文件会被过滤掉 --> <resource> <directory>src/main ...

  5. Python List extend()方法

    Python List extend()方法  Python 列表 描述 extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表). 语法 extend()方法语法 ...

  6. Ztree 多选,显示勾选的路径

    项目要求,需要向后台传递已经勾选的路径,如 l1-a, l1-l3-c,l1-l3-d;(如果是全选状态则只传递全选状态的路径,不传子节点). 具体可以参考jQ  Ztree 的 v3.5 版本 Me ...

  7. Centos7安装tomcat(wget获取安装包)

    选择要下载的版本去tomcat库查看想要下载的版本 https://mirrors.cnnic.cn/apache/tomcat/ 下载选择tomcat8的一个版本 wget https://mirr ...

  8. KNN算法原理及实现

    1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一 ...

  9. 关于linux安装kettle的总结

    一.部署准备 1.1 JDK安装配置 命令行键入“cd /etc”进入etc目录 命令行键入“vi profile”打开profile文件 敲击键盘ctrl+F到文件末尾 在末尾处,即第一个~的地方, ...

  10. js如何获取点击<li>标签里的值