Java并发入门之FutureTask
Java并发入门之FutureTask
前言:
最近遇到一个项目需要上传图片到服务器,API要求是二进制流,那就跑慢点一点点上传。
于是对多线程从没有应用过的我,决定拿多线程直接应用于代码。
应用Executors框架:
ExecutorService threadPool = Executors.newFixedThreadPool(10);
Map<Integer,Future<String>> futuresMap = new HashMap<>();
for(final OurGoods goods : ourGoodsList){
Future<String> future = threadPool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return processImage(goods,xxxxode,sysParam);
}
});
futuresMap.put(goods.getGoodsId(),future);
}
提交到一个结果集后进行判断
暂时这么写,比较Low但是还算比较规范的写法。。
for(Integer goodsId : batchFutureMap.keySet()){
String image;
try {
Future imageTask = batchFutureMap.get(goodsId);
boolean successed = true;
while(!imageTask.isDone()){
try {
Thread.sleep(10);//sleep for 10 millisecond before checking again
} catch (InterruptedException e) {
successed = false;
e.printStackTrace();
}
}
if(!successed){
continue;
}
image = imageTask.get();
if(image != null){
imageMap.put(goodsId,image);
}
}
catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
别忘了关闭线程池,如果不再使用的话:
threadPool.shutdown();
Java并发入门之FutureTask的更多相关文章
- Java 并发专题 :FutureTask 实现预加载数据 在线看电子书、浏览器浏览网页等
继续并发专题~ FutureTask 有点类似Runnable,都可以通过Thread来启动,不过FutureTask可以返回执行完毕的数据,并且FutureTask的get方法支持阻塞. 由于:Fu ...
- Java 并发:Future FutureTask
Future 当向一个ExecutorService提交任务后可以获得一个Future对象,在该对象上可以调用get,cancel等命令来获取任务运行值或者是取消任务.下面是一个简单的计数任务: pu ...
- java并发:获取线程执行结果(Callable、Future、FutureTask)
初识Callable and Future 在编码时,我们可以通过继承Thread或是实现Runnable接口来创建线程,但是这两种方式都存在一个缺陷:在执行完任务之后无法获取执行结果.如果需要获取执 ...
- Java并发3-多线程面试题
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速. 2) 线程和进程有什 ...
- Java并发编程面试题 Top 50 整理版
本文在 Java线程面试题 Top 50的基础上,对部分答案进行进行了整理和补充,问题答案主要来自<Java编程思想(第四版)>,<Java并发编程实战>和一些优秀的博客,当然 ...
- java并发面试
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
- Java并发--Java线程面试题 Top 50
原文链接:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Ja ...
- Java并发编程75个问答
1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon( ...
随机推荐
- linux使用命令上传下载文件 -- lrzsz
之前都是用Xftp工具在本地和linux系统之间上传下载文件,最近觉得麻烦,因为平时用Xshell连接,要传输文件的时候还要额外使用别的工具,下面是lrzsz的安装和简单的使用过程: 详细的使用可以s ...
- Centos 7 配置tomcat服务器
1.首先查看当前系统版本 uname -a 2.安装之前查看系统是否安装了java rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没 ...
- 前端面试题——html与css基础篇
整理一波html和css的面试题,侧重基础,希望明天面试能用到~(╥╯^╰╥) 一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.C ...
- Android Studio [WebView]
WebViewActivity.java package com.xdw.a122; import android.graphics.Bitmap; import android.support.v7 ...
- Mysql 笔记(一)
InnoDB存储引擎 mysql 存储引擎(好难用,看https://www.zybuluo.com/eqyun/note/27850) 简介 InnoDB是事务安全的MySQL存储引擎,从MySQL ...
- java8 Stream使用总结
[前言] java8新特性 java8 函数接口 java8 Optional使用总结 Java 8 时间日期使用 java8 lambda表达式 1.流的介绍 Java8 中的 Stream 是对集 ...
- Java Map知识点
1.遍历 java遍历Map的方式有多种,一下以代码示例来说明使用: Map<String, String> tmap = new HashMap<String, String> ...
- Angular 路由守卫
1. 路由 Angular路由: 可以控制页面跳转:可以在多视图间切换: 2. 路由守卫 Angular路由守卫: 在进入或离开某路由时,用于判断是否可以离开.进入某路由::: return true ...
- 电脑链接WiFi有网络不能上网问题
刚刚入手了一个小米book pro笔记本突然发现网络链接了,但是却上不了网.找了n种方法,最后发现问题在于电脑的网络适配器中的无线模式出现了问题,下面开始解决方案的详细步骤说明. 一 . 打开电脑管理 ...
- 【Java】web实现图片在线预览
一.场景还原 用户上传了一张图片,已有服务器保存路径,现由于系统配置无法直接通过图片URL打开预览图片,需实现点击预览将图片显示在浏览器上. 二.实现方法 html: <a href=" ...