亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

批量Future模式

remcarpediem / 1812人閱讀

摘要:批量在模式的講解中,說到模式是一種支持異步計算并可以返回計算結(jié)果,并在返回結(jié)果前可以阻塞調(diào)用者的線程對象模型。批量模式是在對模式的擴展。

批量 FutureTask

在Future模式的講解中,說到future模式是一種支持異步計算并可以返回計算結(jié)果,并在返回結(jié)果前可以阻塞調(diào)用者的線程對象模型。
批量Future模式是在對Future模式的擴展。比如有,一批FutureTask,我要把這批task打包到一起,等待整個任務(wù)包執(zhí)行完后,在返回給調(diào)用者,或在規(guī)定時間內(nèi)返回計算結(jié)果。

在Jdk中實現(xiàn)的方法是:

// 支持超時的批量任務(wù)模式
 List> invokeAll(Collection> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedException;
        
 List> invokeAll(Collection> tasks)
        throws InterruptedException;
JDK的一種簡單實現(xiàn)方式

Jdk在實現(xiàn)這種模式時,用了一個ArrayList存放task包,每個task還是多帶帶的送入到調(diào)度器中,然后在等待每個task的計算結(jié)果,等到所有的task計算完成后在返回包含每個task的計算結(jié)果集合,否則阻塞當前調(diào)用線程

下面是jdk的實現(xiàn)源碼:

public  List> invokeAll(Collection> tasks)
        throws InterruptedException {
        if (tasks == null)
            throw new NullPointerException();
            
        // 存放task的集合    
        List> futures = new ArrayList>(tasks.size());
        boolean done = false;
        try {
        
            // 每個task都送入到調(diào)度器
            for (Callable t : tasks) {
                RunnableFuture f = newTaskFor(t);
                futures.add(f);
                execute(f);
            }
            
            // 等待每一個task返回計算結(jié)果
            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);
        }
    }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/64703.html

相關(guān)文章

  • Java 8 并發(fā): Threads 和 Executors

    摘要:能夠異步的執(zhí)行任務(wù),并且通常管理一個線程池。這樣我們就不用手動的去創(chuàng)建線程了,線程池中的所有線程都將被重用。在之后不能再提交任務(wù)到線程池。它不使用固定大小的線程池,默認情況下是主機的可用內(nèi)核數(shù)。 原文地址: Java 8 Concurrency Tutorial: Threads and Executors Java 5 初次引入了Concurrency API,并在隨后的發(fā)布版本中...

    J4ck_Chan 評論0 收藏0
  • Java 8 并發(fā)教程:線程和執(zhí)行器

    摘要:在這個示例中我們使用了一個單線程線程池的。在延遲消逝后,任務(wù)將會并發(fā)執(zhí)行。這是并發(fā)系列教程的第一部分。第一部分線程和執(zhí)行器第二部分同步和鎖第三部分原子操作和 Java 8 并發(fā)教程:線程和執(zhí)行器 原文:Java 8 Concurrency Tutorial: Threads and Executors 譯者:BlankKelly 來源:Java8并發(fā)教程:Threads和Execut...

    jsdt 評論0 收藏0
  • python并發(fā) 1:使用 futures 處理并發(fā)

    摘要:標準庫中所有阻塞型函數(shù)都會釋放,允許其他線程運行。如果調(diào)用引發(fā)異常,那么當從迭代器檢索其值時,將引發(fā)異常。總結(jié)自版就支持線程了,只不過是使用線程的最新方式。類封裝了模塊的組件,使使用線程變得更加方便。下一篇筆記應(yīng)該是使用處理并發(fā)。 作為Python程序員,平時很少使用并發(fā)編程,偶爾使用也只需要派生出一批獨立的線程,然后放到隊列中,批量執(zhí)行。所以,不夸張的說,雖然我知道線程、進程、并行、...

    Kyxy 評論0 收藏0
  • 你見過的最全面的python重點

    摘要:前端設(shè)置上下無效果,因為是行內(nèi)元素,是沒有寬高的。求該青蛙跳上一個級的臺階總共有多少種跳法。 首先和大家說個對不起,由于總結(jié)了太多的東西,所以篇幅有點長,這也是我縫縫補補總結(jié)了好久的東西,對于Nginx的東西我沒總結(jié)在這里,大家可以Python聚焦看,點擊直達專欄哦。 前端 span設(shè)置margin上下無效果,因為span是行內(nèi)元素,是沒有寬高的。 Py2 VS Py3 print成...

    ISherry 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<