java futuretask 用法_FutureTask使用

java futuretask 用法_FutureTask使用直接上实例 packagegaobi test FutureTaskTe importjava util concurrent Callable importjava util concurrent ExecutorServ importjava util concurrent Executors importjava util concurrent FutureTas

直接上实例:

package gaobingfa.test.FutureTaskTest;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.FutureTask;

public class FutureTask_a {

public static void main(String[] args) throws Exception {

//创建线程池

ExecutorService executor = Executors.newCachedThreadPool();

FutureTask futureTask = new FutureTask<>(new Callable() {

@Override

public String call() throws Exception {

System.out.println(Thread.currentThread().getName() + “:” + “开始烧开水…”);

// 模拟烧开水耗时

Thread.sleep(2000);

System.out.println(Thread.currentThread().getName() + “:” + “开水已经烧好了…”);

return “开水”;

}

});

//1线程池提交

executor.submit(futureTask);

//2线程启动

Thread thread = new Thread(futureTask);

thread.start();

// do other thing

System.out.println(Thread.currentThread().getName() + “:” + ” 此时开启了一个线程执行future的逻辑(烧开水),此时我们可以干点别的事情(比如准备火锅食材)…”);

// 模拟准备火锅食材耗时

Thread.sleep(3000);

System.out.println(Thread.currentThread().getName() + “:” + “火锅食材准备好了”);

String shicai = “火锅食材”;

// 开水已经稍好,我们取得烧好的开水

//获取futureTask执行结果

String boilWater = futureTask.get();

System.out.println(Thread.currentThread().getName() + “:” + boilWater + “和” + shicai + “已经准备好,我们可以开始打火锅啦”);

}

}

FutureTask常用运行callable的方式

1、submit给线程池

2、new线程并且start

提供了三种功能和五种常用方法:

功能:

1)判断任务是否完成;

2)能够中断任务;

3)能够获取任务执行结果。

方法:

cancel方法用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false。参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true。

isCancelled方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。

isDone方法表示任务是否已经完成,若任务完成,则返回true;

get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回;

get(long timeout, TimeUnit unit)用来获取执行结果,如果在指定时间内,还没获取到结果,就直接返回null。

以上实例包括线程池提交和新线程运行 菜鸟记录 仅供参考!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217729.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午8:54
下一篇 2026年3月18日 上午8:54


相关推荐

  • Trae-免费版cursor安装使用指南

    Trae-免费版cursor安装使用指南

    2026年3月16日
    3
  • IT人力外包越来越流行的原因剖析[通俗易懂]

    IT人力外包越来越流行的原因剖析[通俗易懂]近年来,互联网快速深入我们生活工作的每个角落,it人才成为各大企业争先抢夺的香饽饽,而通过it人力外包引进互联网软件人才已经成为一种趋势,那么越来越多的企业选择与it人力外包公司合作的原因是什么呢?首先选择与it人力外包公司合作,用人单位不需要聘请专门人员或者成立专门部门对it外包人员进行人力资源管理,这些it外包人员的聘用、工资、奖金的发放、社会保险等都是由it人力外包公司负责完成,这使得企业有更多的精力来经营其他业务。其次,it人力外包的用人方式非常灵活,可以化解人员编制限制与业务快速.

    2022年5月19日
    53
  • Lua五:”collectgarbage”、 弱引用table、析构器「建议收藏」

    Lua五:”collectgarbage”、 弱引用table、析构器「建议收藏」Lua具有自动内存回收机制,但是垃圾收集器只能回收那些它认为是垃圾的东西,不会回收那些用户认为是垃圾的东西。比如将一个对象放在一个数组中但没有用时,它就无法被回收,这是因为即使当前没有其他地方在使用它

    2022年7月4日
    33
  • microblaze软核处理器及其ip核调用

    microblaze软核处理器及其ip核调用版权声明 本文为博主原创文章 遵循 CC4 0BY SA 版权协议 转载请附上原文出处链接和本声明

    2026年3月17日
    2
  • JS基础篇1:数据类型(8种)

    JS基础篇1:数据类型(8种)最近有很多人说数据类型是 6 种 我怎么记得 JS 的数据类型有 8 种 最近发现好多人对 JS 的基础不太了解 很多数据类型都没有搞清楚 不 BB 我就按我的理解写一波笔记 每次看一波书我就感觉一次比一次多懂一点 来补下知识点 JS 数据类型 基础概念请注意 JS 的数据类型有 8 种 在 ES5 的时候 我们认知的数据类型确实是 6 种 Number String Boolean undefined o

    2026年3月20日
    1
  • Window下kafka 单机SASL_SCRAM加密及身份认证

    Window下kafka 单机SASL_SCRAM加密及身份认证nbsp nbsp nbsp KAFKA 加密认证机制中的 SASL 主要包括 SASL PLAINTEXTSAS GSSAPISASL SCRAM 这里主要记录一下 Windows 下搭建配置单机 sasl scram 环境 一 前情提要 nbsp nbsp SCRAM 是 kafka 安全机制 SASL 家族中的一个 通过执行用户名 密码认证 如 PLAIN 和 DIGEST MD5 的传统机制来解决安全问题 Kafka 中的默认 SCRAM 实现是

    2026年3月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号