簡體   English   中英

Android:等待線程完成執行方法

[英]Android: Waiting for the threads to finish executing the method

ExecutorService exec = Executors.newFixedThreadPool(8);
List<Future<Object>> results = new ArrayList<Future<Object>>();

// submit tasks
for(int i = 0; i < 8; i++) {
    results.add(exec.submit(new ThreadTask()));
}

...

// stop the pool from accepting new tasks
exec.shutdown();

// wait for results
for(Future<Object> result: results) {
    Object obj = result.get();
}


class ThreadTask implements Callable<Object> {

    public Object call() {
        // execute download
        ...
        return result;
    }
}

上面的代碼沒有向我顯示預期的結果。 更詳細地講,我正在為Android做一個下載管理器。 這些線程用於分段下載文件。 由於每個片段的下載時間可能不同,因此我認為這就是問題所在。

然后,我嘗試在方法內部僅使用簡單的數字返回。 然后線程開始提供預期的結果。

因此,作為解決方案,我想到了一種方法來等待所有線程完成執行。 在上面的代碼中,如何等待所有線程完成工作? 我想我必須使用wait()方法,但是我不知道該怎么做,希望你能幫忙解決這個問題。

謝謝你的時間。

如果您需要在某個時間點滿足一組線程,請嘗試使用“屏障”模式。

Java SE具有其實現:java.util.concurrent.CyclicBarrier

From docs:一種同步輔助工具,它允許一組線程互相等待,以到達一個公共的障礙點。 CyclicBarriers在涉及固定大小的線程方的程序中很有用,該線程方有時必須互相等待。 該屏障稱為循環屏障,因為它可以在釋放等待線程之后重新使用。

CyclicBarrier支持可選的Runnable命令,該命令在障礙中的最后一個線程到達之后但在釋放任何線程之前,每個障礙點運行一次。 此屏障操作對於在任何一方繼續之前更新共享狀態很有用。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CyclicBarrier.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM