砍材农夫砍材农夫
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • java
  • redis
  • mysql
  • 场景类
  • vuepress搭建
  • hexo搭建
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI工具
  • MCP
  • AI集成框架
  • 相关算法
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 基础面试题

    • 基础面试
    • 双亲委派
    • 关于锁
  • 线程并发

    • 线程
    • 线程安全
    • 线程实现方式
    • 线程相关属性
    • Thread和Object相关方法
    • 线程异常
    • 线程池
  • 高并发(JUC|AQS)

    • concurrency
    • AbstractQueuedSynchronizer
    • CountDownLatch
    • Semaphore
    • CyclicBarrier
    • ReentrantLock
    • Future/FutureTask
    • Fork/Join
    • BlockingQueue
    • ArrayBlockingQueue
    • DelayQueue
    • PriorityBlockingQueue
  • 集合相关

    • 集合相关
  • jvm

    • jvm概览
    • 垃圾标记算法
    • 垃圾回收算法
    • jvm监控相关工具
    • jvm内存调优
  • 锁

    • synchronized
  • 介绍
  • demo
  • 总结
  • 代码

介绍

FutureTask 是对Future 的实现类
FutureTask 可以取消任务,并且可以获取任务执行结果

demo

package com.jysemel.java.future;


import lombok.SneakyThrows;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class FutureTaskDemo {
    @SneakyThrows
    public static void main(String[] args) {
        List<FutureTask<Integer>> taskList = new ArrayList<>();
        ExecutorService execute = Executors.newScheduledThreadPool(2);
        for (int i = 0; i < 5; i++) {
            // 传入Callable对象创建FutureTask对象
            FutureTask<Integer> task = new FutureTask<>(new ComputeTask(i, "" + i));
            taskList.add(task);
            // 提交给线程池执行任务,也可以通过exec.invokeAll(taskList)一次性提交所有任务;
            execute.submit(task);
            System.out.println("所有计算任务提交完毕, 主线程接着干其他事情!");
        }
        int result = 0;
        // 从future中取出值来
        for (FutureTask<Integer> future : taskList) {
            int temp = future.get();
            System.out.println("子任务结果=" + temp);
            result = result + temp;
        }
        // 打印求出来的值
        System.out.println("结果合计=" + result);
    }


    static class ComputeTask implements Callable<Integer> {
        private Integer result = 0;
        private String taskName = "";
        ComputeTask(Integer result, String taskName) {
            this.result = result;
            this.taskName = taskName;
            System.out.println("生成子线程计算任务: " + taskName);
        }
        @Override
        public Integer call() throws Exception {
            for (int i = 0; i < 10; i++) {
                result += i;
            }
            Thread.sleep(TimeUnit.SECONDS.toMillis(5));
            System.out.println("子线程计算任务: " + taskName + " 执行完成!");
            return result;
        }

    }
}

总结

代码

代码

最近更新: 2026/1/16 16:27
Contributors: kcnf
Prev
ReentrantLock
Next
Fork/Join