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

时间:2015-07-01 23:48:41

标签: java while-loop infinite-loop

Java中无限循环的实际应用是什么?

例如:

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

你什么时候可以使用它?

6 个答案:

答案 0 :(得分:2)

无限的意义,直到某些变化,你希望它继续运行。因此,直到用户点击“退出”继续运行程序。

在你的例子中,你需要在代码中最终会破坏它的东西。

if (this happens) 
break
end

但是你可能只是把布尔而不是计数器<在while循环中为1。所以在你的例子中这是不好的做法。

program to guess age
initialize age

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

答案 1 :(得分:0)

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

while (true) {
   //do job
}

此类作业的示例可能包括轮换日志文件,复制/备份用户上载等。

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

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

“仅限崩溃”的服务器进程通常是相同的。按照设计,阻止它们的唯一方法就是软件等同于拉动插头。

答案 4 :(得分:0)

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

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

还可以使用无限循环,在这种情况下,您希望线程在应用程序的生命周期内执行。您可以将这些线程标记为守护程序线程

历史上,人们习惯在编写JMS接收器时使用无限循环。但是现在肯定是春天+ 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);}  
    }  

}    

答案 5 :(得分:0)

我参与了市场上领先的BPM产品。

它有无限循环来运行代理(您可以将其视为始终运行的后台线程)来监视某些事情

例如:如果违反了服务水平协议(SLA),则会触发电子邮件提醒或通知相关方

如果您是新手程序员,您可以考虑这个用例:菜单驱动的程序/应用程序

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);
    }
}