微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Java中永远运行程序? System.in.read()是唯一的方法吗?

我拿了 this code
28     public static void main(String[] args) throws IOException {
 29         HttpServer httpServer = startServer();
 30         System.out.println(String.format("Jersey app started with WADL available at "
 31                 + "%sapplication.wadl\nTry out %shelloworld\nHit enter to stop it...",32                 BASE_URI,BASE_URI));
 33         system.in.read();
 34         httpServer.stop();
 35     }

第33行“system.in.read()”是否意味着它会阻塞直到有输入?使用UNIX rc脚本启动Java应用程序时这是否也有效 – 不是从命令行手动启动的?

我想编写一个Java应用程序来监听HTTP连接.系统引导时将自动启动应用程序(使用UNIX rc脚本).这意味着应用程序将持续运行 – 理论上永远,直到有目的地停止.在Java main()方法中实现它的最佳方法是什么?

解决方法

在Java中保留main方法不会自动结束程序.

如果不再运行非守护程序线程,则存在JVM.认情况下,唯一的非守护程序线程是主线程,它在您离开main方法时结束,因此停止JVM.

因此要么不结束主线程(不要让main方法返回),要么创建一个永不返回的新非守护进程线程(至少在你希望JVM结束之前).

由于该规则实际上非常合理,因此通常有一个完美的候选者可以使用这样的线程.对于HTTP服务器,例如,它可以是实际接受连接的线程,并将它们移交给其他线程以进行进一步处理.只要该代码正在运行,JVM将继续运行,即使main方法早已完成运行.

原文地址:https://www.jb51.cc/java/128675.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐