【发布时间】:2018-07-14 21:26:15
【问题描述】:
我正在尝试使用 Thread.join(millis) 使正在运行的线程超时,但它只是挂起并且没有超时。这可能是什么原因?示例代码
public static void main(String[] args) throws InterruptedException {
final Thread t1 = new Thread(() -> {
for (int i = 0; i < 100000000000000000L; i++) {
}
});
t1.start();
t1.join(100);
System.out.println("t1.join called");
}
【问题讨论】:
-
为我工作:ideone.com/qTUHCz
-
t1.join called被显示,但是JVM不会退出,因为Thread不是守护进程,所以它会一直等到它完成。join(int)是“当前”线程等待相关线程结束的时间,如果达到超时值,该方法将简单地返回,它对正在运行的线程没有影响 -
@shmosel 啊,实际上那个页面说 Time limit exceeded #stdin #stdout 5s 4837376KB,这意味着我认为运行该代码 sn-p 的引擎不会让代码运行超过 5s,如果您尝试在 IDE 中运行它,它可能会有不同的行为
-
也适合我
-
@MadProgrammer,啊,非常感谢,这让我发疯了,因为文档说“最多等待几毫秒让这个线程死掉。”我认为这暗示如果等待超过限制,它将杀死线程。这是有道理的,它只是等待它完成,如果超过这个限制,连接将返回并且调用者线程可以继续做它想做的任何事情
标签: java multithreading timeout java-threads