2011-11-04 55 views
0

我已經啓動了四個線程(多線程)&爲每個線程分配一個任務。 每個線程的任務是上傳文件到服務器線程執行查詢

我想執行以下功能。

i>我想只在所有現有4個線程完成其執行時纔將下一組文件分配給4個新線程。

如何確定所有現有的4個線程是否已完成其執行?

我使用的條件

for (Thread thread : threads) { 

    if(thread.getState() == Thread.State.TERMINATED || getAlive()) == false){ 

    ++ counter ; 

    } 
} 

找到線程的狀態。

如果計數器值變爲4,則表示所有線程都不活動或終止。

我得到每個上傳文件的通知。

當我發現計數器值= 4後,我再次分配了四個新文件,使用四個新線程上傳。

可能出現文件第一次沒有上傳的情況,所以我需要重新分配一次。我發現,我正在重新分配一個已經上傳的文件。 所以,它的重複上傳。我再次分配了文件,因爲我沒有收到關於該特定文件上傳成功的通知。

此外,它可能是上面提到的代碼沒有給出線程的正確狀態。當我重新分配文件以便上傳時,線程仍然可以執行操作。

由於我使用了四個線程,counter = 4意味着所有線程都執行了它們的操作。

我該如何解決這個問題?

+0

使用'join()'來阻塞調用線程,直到線程完成。 – abhinav

回答