javascript为什么Java无限循环是可能的?对此有什么建议
我对Java不熟悉,但对JavaScript不熟悉
所以,在JS中不能使用这样的代码
while(true){/* do something */}
因为这样一来,浏览器标签就会永远卡住。实际上,在调用无限循环后,很难关闭此选项卡
但在Java中,正如我所看到的,使用这样的代码是正常的
try {
while (true) {
try {
socket.println(data);
} finally {
socket.close();
}
}
} catch (IOException exception){
log(exception);
}
问题1。所以,我想知道无限循环在Java中是如何工作的
问题2。如果我想在socket上监听数小时的数据,我的线程是否会被困在带有JavaScript的浏览器选项卡上
问题3。(如果Q2==false)为什么Java无限循环不会像我们在JavaScript中看到的那样消耗线程的所有可用资源
第四季度。这种代码变体是否更适合socket读取,因为我在“睡觉”时可能会错过一些重要数据
while(true){
readSocket();
Thread.sleep(10);
}
# 1 楼答案
Q1)首先要理解为什么这段代码不是一个无限循环,看看异常在java中是如何工作的。每当try块中发生异常时,它都会立即移动到catch语句。因此,套接字最终将关闭,然后在再次访问套接字时抛出异常。while循环将退出,错误处理程序块将运行。所以这不是一个无限循环
java中的无限循环与任何其他编程语言一样工作——如果没有退出条件,代码将无法退出
问题2)如果你想长时间监听数据,有很多预构建的类可以帮你处理这些数据。研究Java ServerSocket和一些相关/衍生类
问题3)不确定如何回答,请参见上文
问题4)再次请参见答案#2。许多问题都是通过使用内置服务器方法解决的。如果不想使用内置函数,它们可以作为构建自己的类的很好参考
祝你好运