(FutureTask和Future) -使用方式 开启线程异步执行并可以阻塞得到返回值
一、 FutureTask 使用
/** * FutureTask -使用方式 * 开启一个线异步线程,并让主线程等待返回结果 */ public class FutureTaskSevice { public static void main(String[] args) { FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() { @Override public String call() throws Exception { // todo int count=0; for(int i=0;i<10;i++){ count=count+i; } return "it is subThread complete-count:"+count; } }); // 通过线程执行 Thread thread=new Thread(futureTask); thread.start(); try { String resultStr = futureTask.get(); System.out.println("resultStr = " + resultStr); }catch (Exception e) { e.printStackTrace(); } System.out.println("I am is main Thread"); } }
二、Future 使用
//第二程使用线程池方法 // ThreadPoolExecutor threadPool=new ThreadPoolExecutor(5,10,30,TimeUnit.SECONDS,new ArrayBlockingQueue<>(20));// 也可以自定义线程池 ExecutorService executorService=Executors.newFixedThreadPool(5); Future<String> futureStr= executorService.submit(()->{ return "it is result"; }); try { System.out.println("futureStr.get() = " + futureStr.get());// 此处会阻塞等待 } catch (Exception e) { e.printStackTrace(); } System.out.println("I am is main Thread-2");
重点:(FutureTask和Future)-使用方式 开启线程异步执行并可以阻塞得到返回值,如当一个任务比较耗时,主线程执行一个任务,开启一个线程执行一个任务,最后需要两个线程的结果,就需要主线程执行完后等待子线程的执行结果;实例如一次分页数据请求,主线程可以获取列表数据,子线程可以开启执行统计总行数,最后汇总两个结果一起返回到页面。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构