欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DevOps日常采坑日记(二):线程异常中断

程序员文章站 2022-04-15 18:06:14
...

DevOps日常采坑日记(二):线程异常退出

上次分享了一个我在开发中遇到的split的坑,那就是在切分数据的时候,切分的数据不符合切分规则,或者不含切分的字符串。那就会造成无法切分,这样返回给你的字符串数组中就只会含有一个元素,如果你没有想到这种情况,直接用下标为1或者其他下标的值的时候,你就会报数组越界的异常。这虽然是个小问题,但是再实际的开发当众,项目比较大,你可能会因为这个小问题找半天。我就是因为这个问题,导致我netty和设备之间的长连接断开了。那线程会因为异常而中断呢?

我总结了一些线程中断常见的原因:
1、该线程时间片用完了,进行上下文切换,jvm把资源分配给下个线程,当前线程等待下一个时间片。
2、当前线程在执行期间,使用了sleep方法,让线程休眠指定之间
3、当前线程在执行期间,使用了wait方法,让线程进入等待池,变成等待状态
4、当线程遇到了一个运行时异常,如果这个异常没有经过处理或者抛出,那就会导致线程异常中断。

很明显我遇到的问题是属于第四个,但是有有点不一样,因为netty它有个监听异常的方法,如果出现了异常,就会执行那个监听异常的方法,我在里面做了一个异常处理,就是如果出现了异常,我这里会主动断开长连接。

所以如果你项目中设计到了线程连接的,连接老是断的问题,不妨多打几个log看看,是不是因为线程执行的程序是否出现运行时异常。