保持Java程序无限运行的方法是有效的吗?

c_b*_*eez 3 java concurrency multithreading

我的程序从main开始,并启动一些执行程序工作的线程(读取传感器,更新数据库,向屏幕显示信息).我希望程序无限期运行.

在我的主要线程开始之后的那一刻,我只有:

public static void main(String []args)
{
    //threads start here
    while(true) {}
}
Run Code Online (Sandbox Code Playgroud)

显然这是有效的,但我想知道它是否浪费资源循环.

有没有一种有效的方法来保持程序运行.有优雅的退出方式吗?即在main中启动一个侦听键盘或事件的事件监听器?

如果它更好,我也试过这个:

while(true) {
    TimeUnit.HOURS.sleep(1);
}
Run Code Online (Sandbox Code Playgroud)

编辑:有关线程的更多信息:

我不确定它们是什么类型的线程.我正在实现一个名为gnu.io.SerialPortEventListener的接口,它启动并处理线程,因此它从我身上抽象出来.我将不得不看看API,虽然我认为它没有很好的文档记录,或者我认为是源代码.它们使JVM在IDE(blueJ)中保持活动状态,但在命令行上运行程序时则不行.我只是使用接口的方法将一个事件监听器添加到一个启动线程运行的COM端口.

Ani*_*kur 5

除非你的线程是daemon threads我不明白为什么你应该有一段时间或任何循环,只会占用你的CPU.除非完成所有非守护程序线程,否则不会终止主线程.此外,如果您希望进行清理,可以注册JVM的关闭挂钩.

  • 答案的措辞有点误导.当main方法结束时,主线程*将*终止,无论有多少其他线程.但是,如果至少有一个非守护程序线程在运行,则JVM不会终止. (2认同)