你什么时候会在 Java 中写一个无限循环?

When would you write an infinite loop in Java?

无限循环在Java中有哪些实际应用?

例如:

while(true){
    //statements, but the loop is never set to false
}

你什么时候可以用这个?

从某种意义上说是无限的,直到您希望它保持不变 运行。因此,在用户点击 "exit" 之前,保持 运行 一个程序。

在您的示例中,您需要在代码中添加一些最终会破坏它的内容。

if (this happens) 
break
end

但是你也可以将布尔值而不是 counter < 1 放在 while 循环中。所以在你的例子中这是不好的做法。

program to guess age
initialize age

while (age != 20)
    get guess from user
    age = guess from user
end

如果您的工作是检查是否有任何工作需要完成,完成工作,然后永远重复,您可能会围绕该工作编写一个无限循环。编写无限循环的一种稍微更有效的方法是:

while (true) {
   //do job
}

此类作业的示例可能包括轮换日志文件、copying/backing上传用户上传等。

我通常写的线程看起来像这样:

while(true) {
   data = stream.read();
   // process data
}

stream.read() 通常会挂起,直到提供数据为止。这只会不断读取、处理数据,然后等待更多数据。

在许多更高级别的应用程序中,while(true) 循环隐藏在较低的位置(特别是在基于事件的框架中)。例如,轮询硬件。在某处有一个 while(true) 或类似的结构。

简单的硬件通常只有两个功能:某种设置功能,然后是无限循环,在某些地方实际上称为 forever。循环一直持续到硬件复位或关闭。

"Crash-only" 服务器进程通常是相同的。根据设计,阻止它们的唯一方法是相当于拔掉插头的软件。

我们可以使用无限循环来重复执行某些任务,直到用户想要退出。

    while(true){
      //perform some task
      // value of flag changes in course of your program execution
      if(flag){
       break;
    }
}

在您希望线程执行到应用程序生命周期的情况下,也可以使用无限循环。您可以将这些线程标记为 daemon thread.

过去,人们在编写 JMS 接收器时使用无限循环。但现在肯定是,spring+JMS 集成是首选。

import javax.jms.*;  
import javax.naming.InitialContext;  

public class MyReceiver {  
    public static void main(String[] args) {  
        try{  
            //1) Create and start connection  
            InitialContext ctx=new InitialContext();  
            QueueConnectionFactory f=(QueueConnectionFactory)ctx.lookup("myQueueConnectionFactory");  
            QueueConnection con=f.createQueueConnection();  
            con.start();  
            //2) create Queue session  
            QueueSession ses=con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);  
            //3) get the Queue object  
            Queue t=(Queue)ctx.lookup("myQueue");  
            //4)create QueueReceiver  
            QueueReceiver receiver=ses.createReceiver(t);  

            //5) create listener object  
            MyListener listener=new MyListener();  

            //6) register the listener object with receiver  
            receiver.setMessageListener(listener);  

            System.out.println("Receiver1 is ready, waiting for messages...");  
            System.out.println("press Ctrl+c to shutdown...");  
            while(true){                  
                Thread.sleep(1000);  
            }  
        }catch(Exception e){System.out.println(e);}  
    }  

}    

我曾开发过市场上领先的 BPM 产品。

它无限循环 运行 代理(你可以把它想象成一个后台线程总是 运行ning)来监控某些事情

例如:如果违反服务水平协议(SLA),将触发电子邮件警报或通知相关方

如果你是新手程序员,你可以想到这个用例:菜单驱动program/application

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int choice = 0;

System.out.println("1. Add Book");
System.out.println("2. Delete Book");
System.out.println("3. View Books");
System.out.println("4. Exit");

while(true) {
    //read input from console
    String input = br.readLine();
    choice = Integer.parseInt(input);
    switch(choice) {
        case 1: //code to add a book to library
            break;
        case 2: //code to delete a book from library
            break;
        case 3: //code to view all the books in library
            break;
        case 4://code to exit the application
            System.exit(0);
    }
}