J.U.C系列(四)FutrueTask的使用
FutureTask
FutureTask
实现了RunnableFuture
接口,RunnableFuture
接口继承于Runnable, Future<V>
这使得FutureTask
既可以当做一个任务执行,也可以有 返回值。
public class FutureTask<V> implements RunnableFuture<V>
public interface RunnableFuture<V> extends Runnable, Future<V>
FutureTask
可以用在需要异步获取执行结果或者需要取消执行任务的场景,比如一个任务需要耗时很长,但是超过一定时长需要取消的场景,或者这个任务耗时比较长,等主线程完成自己的任务之后再去获取FutureTask
返回的执行结果。
测试代码如下:
package com.leo.demo.juctest;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;/*** @ClassName: FutureTaskExample* @Description: 关于FutureTask的测试* @Author: leo825* @Date: 2020-05-11 13:19* @Version: 1.0*/
public class FutureTaskExample {public static void main(String[] args) throws ExecutionException, InterruptedException {getThreadLog("主线程开始启动...");FutureTask<Integer> futureTask = new FutureTask<>(() -> {int result = 0;for (int i = 0; i < 100; i++) {TimeUnit.MILLISECONDS.sleep(10);result += i;}getThreadLog("futureTask执行完开始返回结果:" + result);return result;});//定义一个线程去执行计算Thread cmpThread = new Thread(futureTask);cmpThread.start();//主线程调用其他异步线程去执行任务Thread otherThread = new Thread(() -> {try {int costTime = 2;getThreadLog("模拟调用时长" + costTime + "s");TimeUnit.SECONDS.sleep(costTime);} catch (InterruptedException e) {e.printStackTrace();}});otherThread.start();//主线程等待futureTask返回执行结果getThreadLog("主线程开始等待futureTask返回结果:" + futureTask.get());}/*** 获取线程名和时间** @return*/public static void getThreadLog(String logContent) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append("[");stringBuffer.append(Thread.currentThread().getName());stringBuffer.append(" ");stringBuffer.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()));stringBuffer.append("]");stringBuffer.append(logContent);System.out.println(stringBuffer.toString());}
}
执行结果:
[main 2020-05-11 13:44:06.991]主线程开始启动...
[Thread-1 2020-05-11 13:44:07.129]模拟调用时长2s
[Thread-0 2020-05-11 13:44:08.314]futureTask执行完开始返回结果:4950
[main 2020-05-11 13:44:08.315]主线程开始等待futureTask返回结果:4950
J.U.C系列(四)FutrueTask的使用相关推荐
- 效率系列(四) VS常用快捷键
写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...
- 机器学习入门系列四(关键词:BP神经网络)
机器学习入门系列四(关键词:BP神经网络) 标签: 机器学习神经网络 2016-01-12 15:28 80人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(3) 作者同类文章X 版 ...
- 《架构系列四:一键部署应用到Tomcat集群中》
<架构系列四:一键部署应用到Tomcat集群中> 基于前面的<架构系列三:使用Keepalived+Nginx+tomcat实现集群部署>,我们配置了nginx+Tomcat集 ...
- [矩阵的QR分解系列四] QR(正交三角)分解
QR分解 简介 QR分解 定义 存在和唯一性 存在性证明 唯一性证明 分解方法 施密特(Schmidt)方法 吉文斯(Givens)方法 豪斯霍尔德(Householder)方法 例子 施密特(Sch ...
- [矩阵的三角分解系列四] 乔累斯基(Cholesky)分解公式
乔累斯基分解公式 简介 LLT分解 证明 具体解法 稳定性 LDLT分解 证明 具体解法 例子 LLT分解 LDLT分解 引用 矩阵的三角分解是求解线性方程组常用的方法,包括LU分解,LDU分解,杜利 ...
- Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]
Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...
- sed修炼系列(四):sed中的疑难杂症
sed系列文章: sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):s ...
- iOS开发UINavigation系列四——导航控制器UINavigationController
iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...
- Lync Server 2010的部署系列(四) outlook无法加入联机会议
Lync Server 2010的部署系列(四) outlook无法加入联机会议 今天早上和一个深圳朋友使用outlook加入联机会议的时候,报错,提示如下图,故障描述:由于本机的限制,该操作已被取消 ...
- VS 中配置使用Visual SVN系列 四:SVN Server配置和使用
VS 中配置使用Visual SVN系列 四:SVN Server配置和使用 1.打开 2.创建新的共享资源库 3.创建用户 4.设置用户对资源库的访问权限
最新文章
- iangularjs 模板_AngularJS 模板(Templates)
- “Duke选择大奖”荟萃2009最具创新的Java技术应用
- 5、在secureCRT中vi显色
- 成功解决An error ocurred while starting the kernel
- 荣耀手环5没有篮球鸿蒙,荣耀手环5和篮球版区别
- C++STL的vector中front(),back(),begin(),end()的用法
- kotlin int最大值_Kotlin程序查找三个数字中的最大值
- 响应式Web设计的9项基本原则
- 第三:jenkins集成httpclient项目并生成在线报告(接口自动化落地)
- CentOS安装CAS 5.3.4服务端
- 按月分隔时间段,java实现,DateRange
- 服务器装系统03系统,windows server 2003 服务器安装教程完整版
- Spring Boot Admin
- 有没有测试牙齿需不需要修正的软件,三分钟教你测试自己的牙齿需不需要矫正!...
- Overlaps的压盖计数规则
- css,sass,scss和less的区别
- SpringBootSecurity与Shiro
- windowsXP命令集锦
- onecloud的一次刷机自我小总结
- 项目管理电子书_Scrum实战:敏捷软件项目管理与开发【电子书】 附下载地址