日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

ExecutorCompletionService原理具体解释

發布時間:2025/4/5 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ExecutorCompletionService原理具体解释 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 在JDK并發包中有這么一個類ExecutorCompletionService,提交任務后,能夠按任務返回結果的先后順序來獲取各任務運行后的結果。

??? 該類實現了接口CompletionService:

public interface CompletionService<V> {Future<V> submit(Callable<V> task);Future<V> submit(Runnable task, V result);Future<V> take() throws InterruptedException;Future<V> poll();Future<V> poll(long timeout, TimeUnit unit) throws InterruptedException;}

??? 該接口定義了一系列方法:提交實現了Callable或Runnable接口的任務。并獲取這些任務的結果。

??? ExecutorCompletionService實現了CompletionService。內部通過Executor以及BlockingQueue來實現接口提出的規范。當中,Executor由調用者傳遞進來。而Blocking能夠使用默認的LinkedBlockingQueue,也能夠由調用者傳遞。另外,該類還會將提交的任務封裝成QueueingFuture,這樣就能夠實現FutureTask.done()方法,以便于在任務運行完成后,將結果放入堵塞隊列中。

??? QueueingFuture為內部類:

private class QueueingFuture extends FutureTask<Void> {QueueingFuture(RunnableFuture<V> task) {super(task, null);this.task = task;}protected void done() { completionQueue.add(task); }private final Future<V> task;}

??? 當中。done()方法就是在任務運行完成后,將任務放入隊列中。

??? 在提交任務時,將任務封裝成QueueingFuture:

public Future<V> submit(Callable<V> task) {if (task == null) throw new NullPointerException();RunnableFuture<V> f = newTaskFor(task);executor.execute(new QueueingFuture(f));return f;}
??? 在調用take()、poll()方法時,會從堵塞隊列中獲取Future對象,以取得任務運行的結果。



總結

以上是生活随笔為你收集整理的ExecutorCompletionService原理具体解释的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。