Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 杀死无限循环会冻结终端_Java_Java 9_Jshell - Fatal编程技术网

Java 杀死无限循环会冻结终端

Java 杀死无限循环会冻结终端,java,java-9,jshell,Java,Java 9,Jshell,有一个已经发布了,因此,只有当循环不生成任何输出时,解决方案才有效。 如果相反,我尝试运行while(true)System.out.print(1)然后按Ctrl+C,结果终端冻结,似乎没有办法杀死它。 除了关闭和重新打开终端,还有什么可以做的吗?你不应该有这样的循环。您应该通过将活动线程休眠一段时间来释放CPU的时间 while (true) { // Do your processing stuff here. // This line ensures that the

有一个已经发布了,因此,只有当循环不生成任何输出时,解决方案才有效。 如果相反,我尝试运行
while(true)System.out.print(1)然后按Ctrl+C,结果终端冻结,似乎没有办法杀死它。

除了关闭和重新打开终端,还有什么可以做的吗?

你不应该有这样的循环。您应该通过将活动线程休眠一段时间来释放CPU的时间

while (true) {
    // Do your processing stuff here.

    // This line ensures that the active thread releases some time
    // to the CPU, allowing closure of the application via Ctrl-C.
    Thread.sleep(numberOfMillisecondsToSleepFor);
}

您可以使用kill从另一个终端使用您现有的代码终止进程,但是您应该通过正确地编码循环以适应它来防止CPU锁定的情况。

您不应该有这样的循环。您应该通过将活动线程休眠一段时间来释放CPU的时间

while (true) {
    // Do your processing stuff here.

    // This line ensures that the active thread releases some time
    // to the CPU, allowing closure of the application via Ctrl-C.
    Thread.sleep(numberOfMillisecondsToSleepFor);
}

您可以使用kill从另一个终端使用您现有的代码终止进程,但是您应该通过正确地编码循环来满足它,从而真正防止CPU锁定的情况。

好问题。奇怪的是,当试图打印“Hello”时,有时使用CTRL+C确实会终止循环,有时则不会。在另一个终端中,您可以终止-9进程。因为问题已经过时了。然而,在最新版本9.0.1JShell
Ctrl+C
上尝试同样的方法对我来说很有效。问得好。奇怪的是,当试图打印“Hello”时,有时使用CTRL+C确实会终止循环,有时则不会。在另一个终端中,您可以终止-9进程。因为问题已经过时了。然而,在最新版本9.0.1JShell
Ctrl+C
上尝试同样的方法对我来说很有效,但这并不能真正回答问题。拥有一个空循环并不会导致同样的事情。那么空无限循环和带有打印语句的无限循环之间有什么区别(在CPU使用方面)?这就是我要说的。。如果您在JShell中编写一个空循环,您可以使用CTRL+C终止它(只有循环,而不是JShell进程-那里没有任何
sleep
方法)。我不明白为什么在其中包含print语句会改变这种行为。您没有明白我的意思。我很清楚代码是无用的。我试图理解为什么用JShell来说,空无限循环不同于带指令的无限循环。它允许终止一个空的无限循环,但不能终止一个内部有语句的循环。这确实不能回答这个问题。事实上,创建jshell是为了测试Java代码。仅仅通过测试某些循环结构就可以创建无限循环。在这种情况下,您可能需要
jshell
中的一个选项中断执行。这并不是编程一个可以停止的循环的最佳方式;这当然不是要求的。这并不能真正回答问题。拥有一个空循环并不会导致同样的事情。那么空无限循环和带有打印语句的无限循环之间有什么区别(在CPU使用方面)?这就是我要说的。。如果您在JShell中编写一个空循环,您可以使用CTRL+C终止它(只有循环,而不是JShell进程-那里没有任何
sleep
方法)。我不明白为什么在其中包含print语句会改变这种行为。您没有明白我的意思。我很清楚代码是无用的。我试图理解为什么用JShell来说,空无限循环不同于带指令的无限循环。它允许终止一个空的无限循环,但不能终止一个内部有语句的循环。这确实不能回答这个问题。事实上,创建jshell是为了测试Java代码。仅仅通过测试某些循环结构就可以创建无限循环。在这种情况下,您可能需要
jshell
中的一个选项中断执行。这并不是编程一个可以停止的循环的最佳方式;这当然不是要求的。