2010-09-06 51 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

开始一个新线程并等待它完成的意义何在?您只需在当前线程中执行即可获得相同的效果。如果您实际上启动了一些线程并希望在继续前进之前等待所有线程完成,那是另一回事。

线程的要点是并发性,如果你只是坐着等待一个线程完成,你就不会得到任何东西。

相关问题