摘要:批量在模式的講解中,說到模式是一種支持異步計算并可以返回計算結果,并在返回結果前可以阻塞調用者的線程對象模型。批量模式是在對模式的擴展。
批量 FutureTask
在Future模式的講解中,說到future模式是一種支持異步計算并可以返回計算結果,并在返回結果前可以阻塞調用者的線程對象模型。
批量Future模式是在對Future模式的擴展。比如有,一批FutureTask,我要把這批task打包到一起,等待整個任務包執行完后,在返回給調用者,或在規定時間內返回計算結果。
在Jdk中實現的方法是:
// 支持超時的批量任務模式JDK的一種簡單實現方式List > invokeAll(Collection extends Callable > tasks, long timeout, TimeUnit unit) throws InterruptedException; List > invokeAll(Collection extends Callable > tasks) throws InterruptedException;
Jdk在實現這種模式時,用了一個ArrayList存放task包,每個task還是多帶帶的送入到調度器中,然后在等待每個task的計算結果,等到所有的task計算完成后在返回包含每個task的計算結果集合,否則阻塞當前調用線程
下面是jdk的實現源碼:
publicList > invokeAll(Collection extends Callable > tasks) throws InterruptedException { if (tasks == null) throw new NullPointerException(); // 存放task的集合 List > futures = new ArrayList >(tasks.size()); boolean done = false; try { // 每個task都送入到調度器 for (Callable t : tasks) { RunnableFuture f = newTaskFor(t); futures.add(f); execute(f); } // 等待每一個task返回計算結果 for (Future f : futures) { if (!f.isDone()) { try { f.get(); } catch (CancellationException ignore) { // 如果其中有task被取消了,則忽略 } catch (ExecutionException ignore) { } } } done = true; return futures; } finally { if (!done) for (Future f : futures) f.cancel(true); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64703.html
摘要:能夠異步的執行任務,并且通常管理一個線程池。這樣我們就不用手動的去創建線程了,線程池中的所有線程都將被重用。在之后不能再提交任務到線程池。它不使用固定大小的線程池,默認情況下是主機的可用內核數。 原文地址: Java 8 Concurrency Tutorial: Threads and Executors Java 5 初次引入了Concurrency API,并在隨后的發布版本中...
摘要:在這個示例中我們使用了一個單線程線程池的。在延遲消逝后,任務將會并發執行。這是并發系列教程的第一部分。第一部分線程和執行器第二部分同步和鎖第三部分原子操作和 Java 8 并發教程:線程和執行器 原文:Java 8 Concurrency Tutorial: Threads and Executors 譯者:BlankKelly 來源:Java8并發教程:Threads和Execut...
摘要:標準庫中所有阻塞型函數都會釋放,允許其他線程運行。如果調用引發異常,那么當從迭代器檢索其值時,將引發異常。總結自版就支持線程了,只不過是使用線程的最新方式。類封裝了模塊的組件,使使用線程變得更加方便。下一篇筆記應該是使用處理并發。 作為Python程序員,平時很少使用并發編程,偶爾使用也只需要派生出一批獨立的線程,然后放到隊列中,批量執行。所以,不夸張的說,雖然我知道線程、進程、并行、...
摘要:此外,有兩個常用的關閉線程池的方法第一個方法將啟動一次順序關閉,有任務在執行,則等待執行完成,但不接受新的任務第二個方法將取消所有未開始的任務并且試圖中斷正在執行的任務,返回從未開始執行的任務的列表。 四種線程池 在Executors中提供了四種線程池: newCachedThreadPool 可緩存線程池,對于每個線程,如果有空閑線程可用,立即讓它執行,如果沒有,則創建一個新線...
摘要:前端設置上下無效果,因為是行內元素,是沒有寬高的。求該青蛙跳上一個級的臺階總共有多少種跳法。 首先和大家說個對不起,由于總結了太多的東西,所以篇幅有點長,這也是我縫縫補補總結了好久的東西,對于Nginx的東西我沒總結在這里,大家可以Python聚焦看,點擊直達專欄哦。 前端 span設置margin上下無效果,因為span是行內元素,是沒有寬高的。 Py2 VS Py3 print成...
閱讀 516·2021-10-09 09:44
閱讀 2091·2021-09-02 15:41
閱讀 3555·2019-08-30 15:53
閱讀 1834·2019-08-30 15:44
閱讀 1290·2019-08-30 13:10
閱讀 1196·2019-08-30 11:25
閱讀 1462·2019-08-30 10:51
閱讀 3367·2019-08-30 10:49