2010-09-06 97 views
0

我有一個函數將處理交給一個新的線程。如何讓當前線程等待函數在java中返回?

問題是函數被調用的地方不等待函數返回,並在函數調用後立即執行任何代碼。我該如何等待函數返回,以便在它被執行之前沒有代碼,直到它返回?

希望我不太模糊。對於多線程的概念,我還是一個新手。

+0

在這種情況下可能不需要多線程?即你不需要這些任務異步執行也許? – 2010-09-06 09:50:34

+1

恐怕你的問題*太含糊。除非*調用*代碼是從另一個線程調用你的函數,否則*會*等待,直到你的函數完成爲止......但這與等待你的*處理*完成不一樣。如果你可以發佈一個簡短但完整的程序來展示你的意思,它會讓生活變得更容易。 – 2010-09-06 09:51:21

+0

調用代碼實際上是在不同的線程中(主線程)。在正在討論的函數內部創建一個新的線程。我只想讓主線程等待這個函數返回。 – Goutham 2010-09-06 09:55:40

回答

0

如果函數應該等待新線程在返回之前終止,那麼這就是Thread.join()的用途。

+0

謝謝。這是我想要的。 – Goutham 2010-09-06 10:31:12

2

這裏是未來的接口

interface ArchiveSearcher { String search(String target); } 
class App { 
    ExecutorService executor = ... 
    ArchiveSearcher searcher = ... 
    void showSearch(final String target) 
     throws InterruptedException { 
    Future<String> future 
     = executor.submit(new Callable<String>() { 
     public String call() { 
      return searcher.search(target); 
     }}); 
    displayOtherThings(); // do other things while searching 
    try { 
     displayText(future.get()); // use future 
    } catch (ExecutionException ex) { cleanup(); return; } 
    } 
} 

呼叫executor.submit的JDK的描述複製粘貼 - 部隊的任務在獨立線程啓動。調用future.get()將等到任務完成並返回值。

0

那是什麼Thread.join或Object.wait /通知。

調用代碼實際上是一個 不同的線程(主線程)。 A 新線程在 函數內部創建。我只想 主線程等待這個函數 返回。

int main() 
{ 
    Thread t = new Thread(...); 
    t.start(); 
    t.join(); 
} 

這不正是你想要的。

1

開始一個新線程並等待它完成的意義何在?您只需在當前線程中執行即可獲得相同的效果。如果您實際上啓動了一些線程並希望在繼續前進之前等待所有線程完成,那是另一回事。

線程的要點是併發性,如果你只是坐着等待一個線程完成,你就不會得到任何東西。