java 获取多线程执行的结果,可以通过实现Future和Callable接口实现。
1.实现Callable接口
定义一个实现Callable接口的类,用于执行多线程方法和返回结果
public class MyCallableImp implements Callable<Integer> {
@Override
public Integer call() throws Exception {
// 实现需要执行的方法
return 0;
}
}
2.使用ExecutorService提交执行结果
使用ExecutorService创建一个单线程的线程池,使用submit()方法提交MyCallableImp多线程任务,返回一个Future对象。
注意:无论线程正常执行还是中断或出错,必须使用executor.shutdown()方法关闭线程池
public Integer MyExecutorServiceImp () throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Integer> future = executor.submit(new MyCallableImp());
try {
Integer result = future.get();
return result;
} catch (InterruptedException | ExecutionException e){
e.printStackTrace();
} finally {
executor.shutdown();
}
return null;
}
3.获取多个线程执行结果
public List<Integer> MyExecutorServiceImp () throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<Integer>> futureList = new ArrayList<>();
List<Integer> resultList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
futureList.add(executor.submit(new MyCallableImp()));
}
try {
for (Future<Integer> future : futureList) {
Integer result = future.get();
resultList.add(result);
System.out.println(result);
}
return resultList;
} catch (InterruptedException | ExecutionException e){
e.printStackTrace();
} finally {
executor.shutdown();
}
return new ArrayList<>();
}
执行结果