程序如何一直保持运行的?

问这个问题不知道大家会不会觉得提问者是个傻子(还请各位大佬轻喷 = =)...但是这个问题确实是困扰着我!
问题的起因是这样的,先看下面这段代码

public static void main(String[] args) {
    System.out.println(1);        
}

运行这段代码的时候,程序开始运行--->控制台输出1--->程序结束,这段代码在运行完成之后就自动停止了,也就是说我可以理解为程序有开始、有结束。那么如何让程序不自动结束呢?(Java)我了解到的方法有 while true 死循环,或者 wait()

public static void main(String[] args) {
        System.out.println(1);
        while (true) {}
    }
public static void main(String[] args) {
        Object object = new Object();
        System.out.println(1);
        synchronized (object) {
            try {
                object.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

这两种方法都不会主动停止,但是感觉是不是有点太丑了?比如tomcat或者nginx等web容器不太可能写这种比较“无脑”的代码,不可能监听端口的时候是一遍一遍的“无脑”循环监听吧?,所以我就很疑惑,它们是怎么一直在后台运行的?当然,他们的具体实现肯定很复杂,我并不是想知道他们的具体实现(因为太菜估计也实现不了(ーー゛)),而是想了解一下这种想法,在这里请教一下各位大佬,这是怎么个思想或者我要从哪个方面去入手才可能了解这个问题?

阅读 5.9k
1 个回答

实际上呢,nginx 还真就是一个无限循环(apache 没有看过源码,不清楚,但应该也是一个循环)。而且这种做法确实是常规做法,在做服务端网络编程的时候,基本都是这样做的。

你所说的死循环太丑,我倒真没看出来。

而且它也不是无脑。如果没有使用事件机制的话,就循环去 accept(accept 可以阻塞,所以不会无脑),有客户端连进来就去处理;如果使用事件机制的话,就循环去监听是否有事件到来(事件等待也可以阻塞,所以也不会无脑),如果有就去处理事件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题