我有一個線程下載數據,我想等到下載完成後才加載數據。有沒有這樣做的標準方式?Java等待線程完成
更多信息:
我有一個下載類,它從URL(序列化的POJO)獲取數據。下載是Runnable和Observable。它跟蹤下載的字節和下載大小。我有一個進度條,向用戶顯示進度。 GUI觀察下載以更新進度條。
當POJO下載時,我想獲取它並轉到下一步。每一步都要等待前一個結束。問題是我不能想辦法暫停我的應用程序來等待下載線程。一旦下載完成,我想調用download.getObject(),它將把數據作爲一個對象返回。然後我可以投下它並繼續下一次下載。
我有一個幫助類,管理下載的URL並使所有的下載調用。這個調用將調用getObject並執行轉換。 Gui調用helper.getUser()。助手啓動線程運行,並且我希望它在完成時「知道」,以便它可以返回鑄造的對象。
任何建議/示例?我處於這個設計的開始階段,所以我願意改變它。
謝謝。
更新:
我跟着http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get和使用模式來阻止,直到線程完成。代碼非常混亂,我不喜歡這種方法。我將繼續努力尋找一種「乾淨」的方式來處理下載過程的工作流程。
我想加盟(),但保留了GUI的更新。我使用線程的原因是在下載過程中保持GUI更新。調用加入停止發生。 – Allan 2011-01-14 13:41:19
join()將起作用。如果GUI停止更新,則可能必須更詳細地說明要加入的線程。我不會加入美國東部時間。 – akf 2011-01-14 13:49:59
然後你需要確保你沒有在swing線程中調用`join()`。你可以通過創建一個負責你的下載線程的線程來做到這一點。這基本上只是一個你可以忘記的背景工作者。工作線程知道何時下載完成以及該做什麼。你只需要確保擺動對象的編輯是在擺動線程中完成的。 – unholysampler 2011-01-14 13:50:36