请帮助我理解如何让线程在无限时间内进入睡眠状态。
答案 0 :(得分:18)
我无法想到这样做的充分理由。正如其中一条评论所述,Long.MAX_VALUE约为2920亿年,因此Thread.sleep(Long.MAX_VALUE)
就足够了。但如果你想要一个理论上无限的睡眠解决方案:
while (true) {
Thread.sleep(Long.MAX_VALUE);
}
答案 1 :(得分:8)
从字面上看,你不能。没有Java应用程序可以运行无限的时间。硬件将首先死: - )
但在实践 1 中,以下内容将一直处于休眠状态,直到JVM终止...或者线程被中断。
public void freeze() throws InterruptedException {
Object obj = new Object();
synchronized (obj) {
obj.wait();
}
}
如果您愿意,可以在while (true)
循环中捕获异常。用#34; sleep(max int)"做同样的事情。是等价的。
但坦率地说,让一个线程进入睡眠状态"永远"浪费 2 ,可能是一个坏主意。我毫不怀疑会有更好的方法来实现你真正尝试做的事情。
1 - 我谈到的这些解决方案适用于线程需要使自己进入休眠状态的时间。如果你一个线程单方面让一个不同的线程进入睡眠状态,它就不能安全地做到这一点。您可以使用已弃用的Thread.suspend()
方法,但它很危险,并且可能在将来的Java平台上不可用。
2 - 线程堆栈占用大量内存,并且在线程终止之前无法释放。
答案 2 :(得分:5)
Thread.currentThread().join();
直到JVM被杀死才会睡觉。
答案 3 :(得分:0)
让它等待永远不会释放的互斥锁或资源。这是僵局原则。更好的方法是让线程完成他的代码,因此它将结束而不会再次启动。
编辑: 我不建议使用无限循环,因为它是汇集原则。它将消耗大量资源。
答案 4 :(得分:0)