java死循环会把电脑烧了吗

Python012

java死循环会把电脑烧了吗,第1张

遇到死循环不会烧掉电脑,只会让电脑卡

开发java项的过程中,遇到java死循环是在所难免的,有经验的java工程师能够立马解决这种问题,但是新手就未必了,java死循环不会把电脑烧了,死循环占你内存,电脑会卡的不行。死循环的原因一般都是线程A先获得对象锁时,由于while循环,线程A一直在while空循环中。而线程B也因为无法获得锁而执行不了methodB()。因此如果在一个线程在synchronized方法中无法退出,无法将锁释放,另一个线程就只能无限等待了

当发送某个请求,该请求将会在很大的一段时间内,都无法获取接口的返回,程序好像进入假死状态一样,称为死循环。

解决方法:因为在这些场景下,我们无法控制脚本的程序逻辑,无法改动脚本的代码,所以有必要对脚本的执行进行控制。我们可以通过异步调用的方式,防止脚本执行阻塞对主程序带来的负面影响。并且通过添加超时机制,对脚本执行超时的线程进行强制关闭,避免有死循环嫌疑的恶意脚本对系统资源的恶意消耗。

是这样的,ss.accept()方法是阻塞的,也就是说ss所在的线程运行到accept()函数就会一直等待,直到ss接收到了一个Socket请求。正因为accept()是阻塞的,所以一般会把这个函数放在一个单独的线程,这样就不会影响主线程(例如程序界面)的运行,Socket编程几乎是肯定和多线程编程一起用的。accept()放进了单独的线程了自然就不会影响后面代码的执行,因为这时accept()的时间片和后续代码的时间片会由JVM调配,而不是按照代码编排的先后顺序了。

另外你对死循环的理解有偏差,所谓死循环是指循环条件永远为真而导致循环一直不结束,而由于循环内部的方法阻塞导致的循环不结束不属于死循环,这两个有本质的差别。通常Socket.accept()是该放进一个死循环的,也就是你的while(true)