news 2026/5/8 6:36:32

Java中 FutureTask 的使用场景示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java中 FutureTask 的使用场景示例
import java.util.concurrent.*; public class CustomThreadPoolExample { public static void main(String[] args) { // 创建自定义线程池 ExecutorService customExecutor = Executors.newFixedThreadPool(5); // 使用自定义线程池 CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { System.out.println("任务1 - 线程: " + Thread.currentThread().getName()); return "结果1"; }, customExecutor); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { System.out.println("任务2 - 线程: " + Thread.currentThread().getName()); return "结果2"; }, customExecutor); // 关闭线程池 customExecutor.shutdown(); } }

核心使用场景

1 异步计算与结果获取

// 场景:耗时计算,主线程继续执行其他任务 public class AsyncCalculator { public static void main(String[] args) throws Exception { // 1. 创建计算任务 FutureTask<Integer> futureTask = new FutureTask<>(() -> { System.out.println("开始复杂计算..."); Thread.sleep(2000); return 1 + 2 + 3 + 4 + 5; }); // 2. 提交到线程执行 new Thread(futureTask).start(); // 3. 主线程继续执行其他任务 System.out.println("主线程继续处理其他业务..."); Thread.sleep(1000); // 4. 需要结果时获取(阻塞等待) Integer result = futureTask.get(); System.out.println("计算结果: " + result); } }

2 任务超时控制

// 场景:避免无限等待,设置超时时间 public class TimeoutTask { public static void main(String[] args) { FutureTask<String> task = new FutureTask<>(() -> { Thread.sleep(5000); // 模拟耗时操作 return "Result"; }); new Thread(task).start(); try { // 设置3秒超时 String result = task.get(3, TimeUnit.SECONDS); System.out.println("成功获取: " + result); } catch (TimeoutException e) { System.out.println("任务超时,取消任务"); task.cancel(true); // 中断执行线程 } catch (Exception e) { e.printStackTrace(); } } }

3 任务取消与中断

// 场景:用户取消长时间运行的任务 public class CancellableTask { public static void main(String[] args) throws InterruptedException { FutureTask<Integer> task = new FutureTask<>(() -> { for (int i = 0; i < 10; i++) { System.out.println("处理第 " + i + " 个任务"); Thread.sleep(1000); } return 100; }); Thread worker = new Thread(task); worker.start(); // 3秒后取消任务 Thread.sleep(3000); System.out.println("用户取消任务"); boolean cancelled = task.cancel(true); // true表示中断线程 System.out.println("取消结果: " + cancelled); System.out.println("是否已取消: " + task.isCancelled()); } }

4 任务依赖关系

// 场景:任务B依赖任务A的结果 public class DependentTasks { public static void main(String[] args) throws Exception { // 任务A:获取用户信息 FutureTask<String> taskA = new FutureTask<>(() -> { Thread.sleep(1000); return "User-123"; }); // 任务B:依赖任务A的结果 FutureTask<String> taskB = new FutureTask<>(() -> { String userId = taskA.get(); // 等待任务A完成 Thread.sleep(500); return "Profile for " + userId; }); // 并行执行 ExecutorService executor = Executors.newFixedThreadPool(2); executor.submit(taskA); executor.submit(taskB); // 获取最终结果 String result = taskB.get(); System.out.println(result); // Profile for User-123 executor.shutdown(); } }

5 批量任务并行执行

// 场景:并行执行多个独立任务,等待所有完成 public class BatchTasks { public static void main(String[] args) throws Exception { List<FutureTask<Integer>> tasks = new ArrayList<>(); // 创建10个并行任务 for (int i = 0; i < 10; i++) { final int taskId = i; FutureTask<Integer> task = new FutureTask<>(() -> { Thread.sleep((long) (Math.random() * 1000)); return taskId * 10; }); tasks.add(task); new Thread(task).start(); } // 收集所有结果 int total = 0; for (FutureTask<Integer> task : tasks) { total += task.get(); // 按完成顺序获取结果 } System.out.println("总计: " + total); } }

总结

FutureTask的核心价值 :

  1. 任务封装 :将Callable/Runnable封装为可管理的任务单元
  2. 结果获取 :提供阻塞/非阻塞的结果获取方式
  3. 生命周期管理 :完善的状态机管理任务生命周期

参考资料:​​Java多线程与并发编程-FutureTask 的使用场景​​

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 6:33:57

BrowserGym:基于LLM的浏览器自动化智能体开发实战指南

1. 项目概述&#xff1a;当浏览器自动化遇上大语言模型最近在探索大语言模型&#xff08;LLM&#xff09;与真实世界应用交互的边界时&#xff0c;我深度体验了ServiceNow开源的BrowserGym项目。这不仅仅是一个简单的网页自动化工具&#xff0c;它更像是一个为LLM量身定制的“浏…

作者头像 李华
网站建设 2026/5/8 6:28:29

深入Android Framework:构建稳定、高效的无人售卖机系统

摘要: 本文聚焦于Android Framework框架层,探讨其在无人售卖机系统开发中的核心价值与应用实践。区别于常规应用层开发,无人售卖机因其特殊的运行环境(如弱网、断电风险、多外设交互)及业务需求(如交易安全、设备状态监控、离线能力),对Android系统的底层能力提出了更高…

作者头像 李华
网站建设 2026/5/8 6:20:00

前端响应式设计:最佳实践

前端响应式设计&#xff1a;最佳实践 前言 响应式设计是现代前端开发的核心概念之一&#xff0c;它确保网站和应用在不同设备上都能提供良好的用户体验。随着移动设备的普及&#xff0c;响应式设计变得越来越重要。今天&#xff0c;我就来给大家讲讲响应式设计的最佳实践&#…

作者头像 李华
网站建设 2026/5/8 6:19:58

量子计算中时间相关噪声建模与算法性能预测

1. 量子算法性能预测&#xff1a;时间相关噪声建模与仿真量子计算正逐步从理论走向实践&#xff0c;但噪声问题始终是阻碍其实际应用的主要瓶颈。传统研究多关注马尔可夫噪声&#xff08;无记忆效应&#xff09;&#xff0c;而真实量子硬件中的噪声往往具有时间相关性。这种时间…

作者头像 李华
网站建设 2026/5/8 6:19:55

前端状态管理:Pinia最佳实践

前端状态管理&#xff1a;Pinia最佳实践 前言 Pinia是Vue 3官方推荐的状态管理库&#xff0c;它是Vuex的替代品&#xff0c;提供了更加简洁、灵活的API。Pinia的设计理念是简单易用&#xff0c;同时保持了Vuex的核心功能。今天&#xff0c;我就来给大家讲讲Pinia的最佳实践&…

作者头像 李华