java - 无法理解 Thread join()
问题描述
我是多线程的新手。我知道以下关于线程的事情:
thread_obj.join()
握住线直到它结束thread_obj.join(5000)
保持线程 5 秒。然后作为其他线程运行。
我知道这一点,join()
并且join(millis)
保持了一段时间。我的问题是,如果我们提供更多的时间,它会join()
运行良好并且线程保持 5 秒。然后作为其他线程运行,但如果您提供较少的时间然后喜欢,并保持线程直到它结束。sleep()
join(5000)
sleep(1000)
join()
sleep()
join(500)
sleep(2000)
join()
我有以下我不明白的代码join()
public class THRD3 extends Thread {
public void run() {
for(int i = 1 ; i <= 10 ; i++) {
System.out.println(Thread.currentThread().getName()+" : "+i);
try {
//Thread.sleep(500);
Thread.sleep(2000);
}
catch (InterruptedException e) {e.printStackTrace();}
}
}
public static void main(String[] args) throws InterruptedException {
THRD3 obj = new THRD3();
THRD3 obj1 = new THRD3();
THRD3 obj2 = new THRD3();
obj.start();
obj.setName("Joined Thread 0");
//obj.join(2000);
obj.join(500);
obj1.start();
obj2.start();
}
}
解决方案
调用Thread.join
使调用线程等待线程完成执行。这意味着它将在该语句上“阻塞”,并且在执行完成之前不会继续。传递一个参数可以让你指定一个超时,这意味着调用线程将等到线程完成,或者在超时过去时放弃。
在你的代码obj.join(500)
中,让你的主线程什么都不做,等到obj
线程完成,或者直到 500 毫秒过去,以先发生者为准。
推荐阅读
- windows - 如何知道 Windows 转储文件的类型?
- javascript - 语法错误:意外的标记,应为“;”
- javascript - 循环中具有相同值的 HTML 多次提交
- python - 如何制作 3D 图(X,Y,Z),将 Z 值分配给 X,Y 有序对?
- python - 如何显示已经运行的 PyQt5 应用程序的窗口?自我展示()
- c++ - 控件不会移动到选择功能旁边
- wordpress - 自动缩略图来自 WordPress 中的第一张图片
- powershell - 通过运行最多 3 个增量的循环来检查 Windows 服务状态是否正在运行
- php - 尝试使用 ajax 表单而不是表单操作(解决)
- javascript - 可观察或观察者中的错误处理?