我有一个线程,我需要等待它的结果,如下所示:
t1.start();
while (variableModifiedByMyThread == null) {
/* do nothing */
}
// "t1" set the value of "variableModifiedByMyThread"
上面的代码可以工作,但不是一个很好的解决方案...
这段代码是否在做同样的事情(是否在等待“t1”线程)?
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// "t1" thread finished
最佳答案
前者是等待一个变量被设置,后者是等待线程死亡。如果变量是在线程死亡之前设置的,除了以下情况外几乎没有区别:
- 前者“自旋”——等待线程一直在做某事(检查变量)——非常浪费!
- 后者可以被另一个线程中断。
关于Java 等待线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1209545/