FutureTask详解

FutureTask详解FutureTask 介绍一个可取消的异步计算 FutureTask 提供了对 Future 的基本实现 可以调用方法去开始和取消一个计算 可以查询计算是否完成并且获取计算结果 只有当计算完成时才能获取到计算结果 一旦计算完成 计算将不能被重启或者被取消 除非调用 runAndReset 方法 除了实现了 Future 接口以外 FutureTask 还实现了 RunnableFutu 使用 Futu

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

FutureTask介绍

FutureTask使用

private final ConcurrentMap 
  
    > taskCache = new ConcurrentHashMap<>(); private String executionTask(final String taskName)throws ExecutionException, InterruptedException { while (true) { Future 
   
     future = taskCache.get(taskName); // 1.1,2.1 if (future == null) { Callable 
    
      task = () -> taskName; FutureTask 
     
       futureTask = new FutureTask<>(task); future = taskCache.putIfAbsent(taskName, futureTask); // 1.3 if (future == null) { future = futureTask; futureTask.run(); // 1.4执行任务 } } try { return future.get(); // 1.5, } catch (CancellationException e) { taskCache.remove(taskName, future); } } } 
      
     
    
  

在这里插入图片描述当两个线程试图同时执行同一个任务时,如果Thread 1执行1.3后Thread 2执行2.1,那么接下来Thread 2将在2.2等待,直到Thread 1执行完1.4后Thread 2才能从2.2(FutureTask.get())返回

FutureTask实现

Future

FutureTask状态转换

可能的状态过渡: 1、NEW -> COMPLETING -> NORMAL:正常结束 2、NEW -> COMPLETING -> EXCEPTIONAL:异常结束 3、NEW -> CANCELLED:任务被取消 4、NEW -> INTERRUPTING -> INTERRUPTED:任务出现中断 

在这里插入图片描述

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

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

(0)
上一篇 2026年3月26日 下午2:56
下一篇 2026年3月26日 下午2:56


相关推荐

发表回复

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

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