我有一个函数,其中处理被赋予新线程。
问题是调用函数的地方不等待函数返回并在函数调用后立即执行任何代码。我如何等待函数返回,所以没有代码执行后才返回?
希望我不要太模糊。我仍然是多线程概念的新手。
答案 0 :(得分:2)
这是来自JDK对Future接口的描述的复制粘贴
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
- 强制任务在独立线程中启动。调用future.get()
将等到任务完成并返回值。
答案 1 :(得分:1)
启动新线程并等待它完成的重点是什么?只需在当前线程中执行即可获得相同的效果。如果您实际上正在启动许多线程并且想要在继续前进之前等待所有线程完成,那么这是另一回事。
线程的重点是并发性,如果你只是闲着等待一个线程完成,你就不会得到任何东西。
答案 2 :(得分:0)
如果函数在返回之前应该等待新线程终止,那么这就是Thread.join()
的用途。
答案 3 :(得分:0)
是为什么做了Thread.join或Object.wait / notify。
调用代码实际上是一个 不同的线程(主线程)。一个 新的线程在里面创建 功能有问题。我只想要 主线程等待这个功能 回来。
int main()
{
Thread t = new Thread(...);
t.start();
t.join();
}
这正是您想要的。