对于FutureTask的分析我在上个章节大致介绍过了 可点下链接进行查阅
https://blog.csdn.net/horse_xiao/article/details/94589682
本章的重点是讲述的是FutureTask的初步使用
以及通过传入一个List的集合 ,对集合中的每个数据进行相应的操作
初步使用
首先定义一个接口去实现callable接口
package com.zgc.Future; import java.util.concurrent.Callable; public class FutureThread implements Callable{ @Override public Object call() throws Exception { System.out.println("正在计算结果"); return 1; } }
接着定义一个FutureTask去载入Callable接口的实现类
package com.zgc.Future; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class FutureTaskAchi { public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask futureTask=new FutureTask(new FutureThread()); Thread thread=new Thread(futureTask); thread.start(); System.out.println("结果为"+futureTask.get()); } }
结果如下
传入一个List的集合 ,对集合中的每个数据进行相应的操作
package com.zgc.Future; import java.util.ArrayList; import java.util.List; import java.util.concurrent.*; public class FutureTaskTest { Object getResult(List list) throws ExecutionException, InterruptedException { //创建需要异步执行的futureTasks集合 List<FutureTask> futureTasks=new ArrayList<>(); //开辟一个数量为10的线程池 ExecutorService executorService= Executors.newFixedThreadPool(10); //获得list集合中的每个属性并根据该属性创建相应的FutureTask for (int i=0;i<list.size();i++){ int num=i; Callable callable=new Callable() { @Override public String call() throws Exception { System.out.println(num); return "hellow"+num; } }; FutureTask futureTask=new FutureTask(callable); //将每个futureTask添加到对应的集合中去 futureTasks.add(futureTask); } //将集合中的futureTask交给线程池管理 futureTasks.forEach(futureTask -> { executorService.submit(futureTask); }); List finallyResult=new ArrayList(); futureTasks.forEach(futureTask -> { try { //获取每个futureTask的返回值 Object object=futureTask.get(); finallyResult.add(object); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } }); //关闭线程池 executorService.shutdown(); return null; } public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTaskTest taskTest=new FutureTaskTest(); List list =new ArrayList(); list.add(1); list.add(2); list.add(5); list.add(1); list.add(2); list.add(5); list.add(1); list.add(2); list.add(5); list.add(1); list.add(2); list.add(5); list.add(1); list.add(2); list.add(5); taskTest.getResult(list); } }
输出结果