1.在ThreadPoolExecutor中使用ExecutorService中的方法

方法invokeAny() 和invokeAll() 具有阻塞特性。
方法invokeAny() 取得第一个完成任务的结果值, 当第一个任务执行完成后, 会调用interrupt() 方法将其他任务中断, 所以在这些任务中可以结合if(Thread.current Thread() .isInterrupted) ==true) 代码来决定任务是否继续运行。
方法invokeAll() 等全部线程任务执行完毕后, 取得全部完成任务的结果值。

2.方法invoke Any(Collection tasks) 的使用与interrupt

此实验验证方法invoke Any) 的确是取得第一个完成任务的结果值, 但在这个过程中出
现两种情况:

1) 无if(Thread.current Thread() .is Interrupted() ) 代码:已经获得第一个运行的结果值后,其他线程继续运行。
2) 有if(Thread.current Thread() .is Interrupted() 代码:已经获得第一个运行的结果值后,其他线程如果使用throw new InterruptedException() 代码则这些线程中断, 虽然throw抛出了异常, 但在main线程中并不能捕获异常。如果想捕获异常, 则需要在Callable中使用try-catch显式进行捕获。

3.方法invokeAny()与执行慢的任务异常

此实验验证在快的任务优先执行完毕后,执行慢的任务出现异常时,默认情况下不会在控制台输出异常信息。如果显式使用try-catch语句块则可以自定义捕获异常。

4.方法invokeAny与执行快的任务异常

此实验验证在执行快的任务出现异常时,在默认情况下是不在控制台输出异常信息的,除非显式使用try-catch捕获, 而等待执行慢的任务返回的结果值。

5.方法invokeAny()与全部异常

此实验验证在全部任务都出现异常时, 程序抛出Execution Exception异常。

6.方法invokeAny(Collection Tasks, timeout, time Unit) 超时的测试

方法T invoke Any(Collection<?extends Callable>tasks, longtime out, TimeUnit unit)
的主要作用就是在指定时间内取得第一个先执行完任务的结果值。

7.方法invokeAll(Collection tasks) 全正确

方法invokeAll() 会返回所有任务的执行结果, 并且此方法执行的效果也是阻塞执行的,要把所有的结果都取回时再继续向下运行。

8.方法invokeAll(Collection tasks) 快的正确慢的异常

在多个任务的过程中,执行任务快慢与运行时发生的异常也有一些联系。

9.方法invokeAll(Collectiontasks) 快的异常慢的正确

10.方法invokeAll(Collection tasks, longtime out, TimeUnit unit)先慢后快

方法invoke All(Collection tasks, longtime out, TimeUnit unit) 的作用是如果全部任务在指定的时间内没有完成,则出现异常