Java 等待线程问题

标签 java multithreading

我有一个线程,我需要等待它的结果,如下所示:

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/

相关文章:

java - 我在java中调用webservice时出现404错误

android - Android 中使用 Canvas 和 SurfaceView 时的 Thread 或 Runnable

Java - 在使用 JButton 执行时暂停线程池

java - 请求未异步处理

java - ProcessBuilder (java) 的问题

java - java swing应用程序中的服务层

类似于ZPT(属性语言)的Java模板库

multithreading - Win32注册表线程安全吗?

vb.net - 如何在vb.net中使用waitHandle

c - C 错误输出中的简单 OpenMP For 循环