这篇文章主要记录一下有返回值的多线程该怎么实现。
之前的文章有提到过ThreadPoolTaskExecutor线程池执行任务有几个方法:
executor.execute(Runnable task):完美适用于没有返回值的情况。未捕获的异常会抛出
executor.submit(Runnable task):也适用于没返回值的情况,未捕获的异常不会抛出。
executor.submit(Callable<T> task):有返回值。未捕获的异常不会抛出;其实这个方法内部也是调用的execute方法,但是当出现异常是会使用setException方法把异常信息放入Future中,所以要想获取该方法的异常信息则需要执行Future的get方法来捕获异常信息。
先分析一下需要返回值的实现要求:
一:是执行后要得到想要的返回值。
二:是要在所有线程执行结束后对返回值进行进一步处理。