摘要:批量在模式的講解中,說到模式是一種支持異步計算并可以返回計算結果,并在返回結果前可以阻塞調用者的線程對象模型。批量模式是在對模式的擴展。
批量 FutureTask
在Future模式的講解中,說到future模式是一種支持異步計算并可以返回計算結果,并在返回結果前可以阻塞調用者的線程對象模型。
批量Future模式是在對Future模式的擴展。比如有,一批FutureTask,我要把這批task打包到一起,等待整個任務包執(zhí)行完后,在返回給調用者,或在規(guī)定時間內返回計算結果。
在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); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/64703.html
摘要:能夠異步的執(zhí)行任務,并且通常管理一個線程池。這樣我們就不用手動的去創(chuàng)建線程了,線程池中的所有線程都將被重用。在之后不能再提交任務到線程池。它不使用固定大小的線程池,默認情況下是主機的可用內核數。 原文地址: Java 8 Concurrency Tutorial: Threads and Executors Java 5 初次引入了Concurrency API,并在隨后的發(fā)布版本中...
摘要:在這個示例中我們使用了一個單線程線程池的。在延遲消逝后,任務將會并發(fā)執(zhí)行。這是并發(fā)系列教程的第一部分。第一部分線程和執(zhí)行器第二部分同步和鎖第三部分原子操作和 Java 8 并發(fā)教程:線程和執(zhí)行器 原文:Java 8 Concurrency Tutorial: Threads and Executors 譯者:BlankKelly 來源:Java8并發(fā)教程:Threads和Execut...
摘要:標準庫中所有阻塞型函數都會釋放,允許其他線程運行。如果調用引發(fā)異常,那么當從迭代器檢索其值時,將引發(fā)異常??偨Y自版就支持線程了,只不過是使用線程的最新方式。類封裝了模塊的組件,使使用線程變得更加方便。下一篇筆記應該是使用處理并發(fā)。 作為Python程序員,平時很少使用并發(fā)編程,偶爾使用也只需要派生出一批獨立的線程,然后放到隊列中,批量執(zhí)行。所以,不夸張的說,雖然我知道線程、進程、并行、...
摘要:前端設置上下無效果,因為是行內元素,是沒有寬高的。求該青蛙跳上一個級的臺階總共有多少種跳法。 首先和大家說個對不起,由于總結了太多的東西,所以篇幅有點長,這也是我縫縫補補總結了好久的東西,對于Nginx的東西我沒總結在這里,大家可以Python聚焦看,點擊直達專欄哦。 前端 span設置margin上下無效果,因為span是行內元素,是沒有寬高的。 Py2 VS Py3 print成...
閱讀 564·2021-10-09 09:44
閱讀 2257·2021-09-02 15:41
閱讀 3620·2019-08-30 15:53
閱讀 1882·2019-08-30 15:44
閱讀 1346·2019-08-30 13:10
閱讀 1267·2019-08-30 11:25
閱讀 1539·2019-08-30 10:51
閱讀 3426·2019-08-30 10:49