概述
執行器服務作為線程池,不僅僅可以提高執行任務的效率,還可以控制一組相關任務。例如,可以在執行器中使用shutdownNow方法取消所有的任務。 控制工作群組
java.util.concurrent.ExecutorService T invokeAny(Collection<Callable<T>> tasks)T invokeAny(Collection<Callable<T>> tasks, long timeout,TimeUnit unit)// 執行給定的任務,返回其中一個任務的結果(程式任意一個已完成的結果)。// 第二個方法若發生逾時,拋出一個TimeOutException異常List<Future<T>> invokeAll(Collection<Callable<T>> tasks)List<Future<T>> invokeAll(Collection<Callable<T>> tasks,long timeout, TimeUnit unit)// 執行給定的任務,返回所有的結果。第二個方法若發生逾時,拋出一個Timeout Exception異常java.util.concurrent.ExecutorCompletionService<V>ExecutorCompletionService(Executor e)// 構建一個執行器完成服務來收集給定執行器的結果Future<V> submit(Callable<V> task)Future<V> submit(Runnable task,V result) // 提交一個任務給底層的執行器Future<V> take()// 移除下一個已完成的結果,如果沒有任何已完成的結果可用則阻塞Future<V> poll()Future<V> poll(long time,TimeUnit unit)//移除下一個已完成的結果,如果沒有已完成的結果可用則返回null。第二個方法將等待給定的時間。
PS:其中invokeAll有個特殊的地方就是:如果其建立3個任務,他會建立2個子線程,然後剩下的任務會繼續在本線程去執行。