当前位置: 首页 > news >正文

FutureTask如何使用?

FutureTask是Java中的一个具体类,它实现了RunnableFuture接口,该接口结合了RunnableFuture的功能。FutureTask可以用于表示一个可以取消的异步计算。FutureTask非常适合用于与Executor框架一起使用,但也可以单独使用。

FutureTask的基本用法

  1. 使用Callable创建FutureTask
    FutureTask可以使用一个Callable对象来创建,该Callable对象的call方法定义了任务的具体执行内容,并可以返回结果。

  2. 使用Runnable创建FutureTask
    FutureTask也可以使用一个Runnable对象来创建,不过Runnable对象不会返回结果。因此,你通常还需要传递一个用于保存结果的对象。

示例代码

使用Callable创建FutureTask

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;public class FutureTaskExample {public static void main(String[] args) {// 创建一个Callable任务Callable<Integer> callableTask = () -> {Thread.sleep(2000);return 42;};// 使用Callable创建FutureTaskFutureTask<Integer> futureTask = new FutureTask<>(callableTask);// 创建一个ExecutorService实例ExecutorService executor = Executors.newSingleThreadExecutor();// 提交FutureTask给ExecutorService执行executor.submit(futureTask);try {// 等待任务完成并获取结果Integer result = futureTask.get();System.out.println("Result: " + result);} catch (InterruptedException | ExecutionException e) {e.printStackTrace();} finally {// 关闭ExecutorServiceexecutor.shutdown();}}
}

使用Runnable创建FutureTask

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;public class FutureTaskWithRunnableExample {public static void main(String[] args) {// 创建一个Runnable任务Runnable runnableTask = () -> {try {Thread.sleep(2000);} catch (InterruptedException e) {Thread.currentThread().interrupt();}System.out.println("Runnable task executed");};// 创建一个FutureTask,并传递Runnable和结果对象FutureTask<Void> futureTask = new FutureTask<>(runnableTask, null);// 创建一个ExecutorService实例ExecutorService executor = Executors.newSingleThreadExecutor();// 提交FutureTask给ExecutorService执行executor.submit(futureTask);try {// 等待任务完成futureTask.get();System.out.println("FutureTask completed");} catch (InterruptedException | ExecutionException e) {e.printStackTrace();} finally {// 关闭ExecutorServiceexecutor.shutdown();}}
}

FutureTask的其他功能

  1. 取消任务
    FutureTask实现了Future接口,因此可以使用cancel方法取消任务。

    futureTask.cancel(true);
    
  2. 检查任务是否完成
    可以使用isDone方法检查任务是否完成。

    if (futureTask.isDone()) {// 任务已完成
    }
    
  3. 检查任务是否被取消
    可以使用isCancelled方法检查任务是否被取消。

    if (futureTask.isCancelled()) {// 任务已取消
    }
    

总结

  • FutureTask结合了RunnableFuture的功能,非常适合表示可取消的异步计算。
  • 可以使用CallableRunnable对象创建FutureTask,并提交给ExecutorService执行。
  • FutureTask提供了取消任务、检查任务是否完成等功能,使其在并发编程中非常有用。
http://www.lryc.cn/news/383149.html

相关文章:

  • Webpack: 如何借助预处理器、PostCSS 等构建现代 CSS 工程环境
  • 一篇文章告诉你如何正确使用chatgpt提示词
  • qt基于QGraphicsView的屏幕旋转
  • 一个土木工程专业背景的开发者,讲述开源带给他的力量
  • express+vue在线im实现【四】
  • 【Qt 实现3D按钮】
  • 8.每日LeetCode-笔试题,交替打印数字和字母
  • UE5近战对抗系统Tutorial
  • Typescript: declear
  • Linux内核编译流程
  • 昇思25天学习打卡营第2天 | 张量Tensor
  • 时间安排 |规划
  • PS系统教程28
  • 如何在web页面下做自动化测试?
  • spring源码环境的搭建
  • 小山菌_代码随想录算法训练营第三十四天| 56. 合并区间、
  • 让工厂像手机一样更“聪明”
  • vue2与vue3数据响应式对比之检测变化
  • Spring Cloud - 开发环境搭建
  • 绘制图形
  • SpringAop实战(xml文件/纯注解两种方式)
  • (八)Linux的进程与线程
  • Map-JAVA面试常问
  • prometheus+grafana搭建监控系统
  • flink学习-flink sql
  • 高考填报志愿攻略,5个步骤选专业和院校
  • Kubernetes排错(十)-处理容器数据磁盘被写满
  • 使用QtGui显示QImage的几种方法
  • C++ lamda
  • Linux_应用篇(27) CMake 入门与进阶