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的使用相关推荐

  1. 效率系列(四) VS常用快捷键

    写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...

  2. 机器学习入门系列四(关键词:BP神经网络)

    机器学习入门系列四(关键词:BP神经网络) 标签: 机器学习神经网络 2016-01-12 15:28 80人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(3) 作者同类文章X 版 ...

  3. 《架构系列四:一键部署应用到Tomcat集群中》

    <架构系列四:一键部署应用到Tomcat集群中> 基于前面的<架构系列三:使用Keepalived+Nginx+tomcat实现集群部署>,我们配置了nginx+Tomcat集 ...

  4. [矩阵的QR分解系列四] QR(正交三角)分解

    QR分解 简介 QR分解 定义 存在和唯一性 存在性证明 唯一性证明 分解方法 施密特(Schmidt)方法 吉文斯(Givens)方法 豪斯霍尔德(Householder)方法 例子 施密特(Sch ...

  5. [矩阵的三角分解系列四] 乔累斯基(Cholesky)分解公式

    乔累斯基分解公式 简介 LLT分解 证明 具体解法 稳定性 LDLT分解 证明 具体解法 例子 LLT分解 LDLT分解 引用 矩阵的三角分解是求解线性方程组常用的方法,包括LU分解,LDU分解,杜利 ...

  6. Paddle Graph Learning (PGL)图学习之图游走类deepwalk、node2vec模型[系列四]

    Paddle Graph Learning (PGL)图学习之图游走类模型[系列四] 更多详情参考:Paddle Graph Learning 图学习之图游走类模型[系列四] https://aist ...

  7. sed修炼系列(四):sed中的疑难杂症

    sed系列文章: sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):s ...

  8. iOS开发UINavigation系列四——导航控制器UINavigationController

    iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationIte ...

  9. Lync Server 2010的部署系列(四) outlook无法加入联机会议

    Lync Server 2010的部署系列(四) outlook无法加入联机会议 今天早上和一个深圳朋友使用outlook加入联机会议的时候,报错,提示如下图,故障描述:由于本机的限制,该操作已被取消 ...

  10. VS 中配置使用Visual SVN系列 四:SVN Server配置和使用

    VS 中配置使用Visual SVN系列 四:SVN Server配置和使用 1.打开 2.创建新的共享资源库 3.创建用户 4.设置用户对资源库的访问权限

最新文章

  1. iangularjs 模板_AngularJS 模板(Templates)
  2. “Duke选择大奖”荟萃2009最具创新的Java技术应用
  3. 5、在secureCRT中vi显色
  4. 成功解决An error ocurred while starting the kernel
  5. 荣耀手环5没有篮球鸿蒙,荣耀手环5和篮球版区别
  6. C++STL的vector中front(),back(),begin(),end()的用法
  7. kotlin int最大值_Kotlin程序查找三个数字中的最大值
  8. 响应式Web设计的9项基本原则
  9. 第三:jenkins集成httpclient项目并生成在线报告(接口自动化落地)
  10. CentOS安装CAS 5.3.4服务端
  11. 按月分隔时间段,java实现,DateRange
  12. 服务器装系统03系统,windows server 2003 服务器安装教程完整版
  13. Spring Boot Admin
  14. 有没有测试牙齿需不需要修正的软件,三分钟教你测试自己的牙齿需不需要矫正!...
  15. Overlaps的压盖计数规则
  16. css,sass,scss和less的区别
  17. SpringBootSecurity与Shiro
  18. windowsXP命令集锦
  19. onecloud的一次刷机自我小总结
  20. 项目管理电子书_Scrum实战:敏捷软件项目管理与开发【电子书】 附下载地址

热门文章

  1. 用户退出后还锁表的处理方法
  2. PL/SQL Developer如何修改表数据
  3. me21n增强BADI:ME_PROCESS_PO_CUST之process_account
  4. SAP FI新手常用代码
  5. abap-在table control中实现查找功能
  6. alv导出本地文件DUMP
  7. SAP读取财务报表版本的标准函数
  8. alv+checkbox+select all
  9. ALV的SAP自带标准程序实例
  10. “兴趣社区2.0”俘获年轻人