Java 无限循环线程中的问题
这是我节目的一部分Java 无限循环线程中的问题,java,Java,这是我节目的一部分 Thread rcv_thread = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("getmsg"); while (true) { /*try { Thread.sleep(0); } catch (Interru
Thread rcv_thread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("getmsg");
while (true) {
/*try {
Thread.sleep(0);
} catch (InterruptedException e) {
e.printStackTrace();
}*/
if (!getmsg.isEmpty() && socket.isConnected()) {
System.out.println("handle");
getmsg_ = getmsg.get(0).split(";");
if (socket.getInetAddress().toString()
.equals("/" + getmsg_[0])) {
PW.println(getmsg_[2] + " sent from"
+ getmsg_[1]);
getmsg.remove(0);
}
}
}
}
});
rcv_thread.start();
这真是太奇怪了。当我注释try{}catch{}
的范围时,程序从不在的范围内运行
但是如果我取消try{}catch{}
范围内的注释,循环将成功运行,并在范围内运行,而(true){}
这是我的问题。对不起,我的英语很差。如果没有wait()
(这比sleep()
更好)您的循环将消耗所有CPU资源,因此编译器可能会禁用内容。
在您的情况下,实际原因将根据体系结构/Java编译器/JVM/设置而有所不同。在循环时如何检测进入/未进入?我使用System.out.println(“get if”)代码>但监视器从不显示。因此,如果我需要在线程中运行无限循环,如While(true){}
,我需要添加sleep
,对吗?正如我所说-wait()
在本内容中优于sleep()
。但答案是肯定的。否则,您的代码将消耗所有可用资源,并将杀死您的系统代码>在之后,当(true)
时,循环将运行??为什么?你是说你的代码带有System.out.println(“got”)代码>循环内部正在运行并生成(许多)“get”输出行?在你的问题中,你说如果没有sleep()
语句,它就不会生成输出。在那之后,我添加了System.out.println(“get”)
,而不是sleep
。但是它运行