java中的异步任务处理和Feature接口
简介
Java并发包提供了一套框架,大大简化了执行异步任务所需要的开发。框架引入了“执行服务”的概念,封装了任务执行的细节,对任务提交者而言,他可以关注任务本身,如提交任务、获取结果、取消任务。而不用关注任务执行的细节。
基本接口
①Runnable和Callable: 表示要执行的任务
②Excecutor和ExecutorService: 表示执行服务
③Future: 表示异步执行的结果
示例
import java.util.concurrent.*; // ①要执行的异步任务 class Task implements Callable<Double> { @Override public Double call() { //以异步方式在新的线程中执行耗时的操作 try { System.out.println("doSomeLongComputation start"); Thread.sleep(3000); System.out.println("doSomeLongComputation end"); } catch (InterruptedException e) { throw new RuntimeException(e); } return 1.0; } } public class MyTestFeature { void doSomethingElse() { try { System.out.println("doSomethingElse start"); Thread.sleep(1000); System.out.println("doSomethingElse end"); } catch (InterruptedException e) { throw new RuntimeException(e); } } public void testFeature() { //②执行服务 ExecutorService executor = Executors.newCachedThreadPool(); //③异步任务结果 Future<Double> futureRate = executor.submit(new Task()); //异步操作进行的同时你可以做其他的事情 doSomethingElse(); try { //获取异步操作的结果,如果最终被阻塞,无法得到结果,那么在最多等待5秒钟之后退出 Double result = futureRate.get(5, TimeUnit.SECONDS); System.out.println("Result->" + result); } catch (ExecutionException e) { // 计算抛出一个异常 e.printStackTrace(); } catch (InterruptedException ie) { // 当前线程在等待过程中被中断 System.out.println("InterruptedException"); } catch (TimeoutException te) { // 在Future对象完成之前超过已过期 System.out.println("TimeoutException"); } executor.shutdown(); } public static void main(String[] args) { MyTestFeature case1 = new MyTestFeature(); case1.testFeature(); } }
执行
doSomethingElse start
doSomeLongComputation start
doSomethingElse end
doSomeLongComputation end
Result->1.0
说明
①有两个关闭方法:shutdown和shutdownNow。区别:shutdown不再接受新任务,但已经提交的任务(即使未开始)会继续执行;shutdownNow不仅不接受新任务,且会终止已提交但未执行的任务。
②例子中如果executor不关闭,主线程结束后,还得等子线程等待很长时间结束
参考
https://blog.csdn.net/wangdong5678999/article/details/81837387
分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2012-10-08 linux 打包 压缩