Java中无限循环的实际应用是什么?
例如:
while(true){
//statements, but the loop is never set to false
}
你什么时候可以使用它?
答案 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);
}
}