多线程并发总结 interrupt

Interrupt也是写多线程的时候需要注意的一个地方。

有时候需要停掉Java的一个线程,这个时候推荐使用的是intertupt的方法。

但是这个方法其实不会直接把线程停掉,只会在一个线程的标志位上面标注当前线程已经被标记成interrupted了。

为什么会是这样操作的呢?我觉得也很容易理解,因为如果硬性中止一个线程,我们根本不知道是不是还有一些资源是没有正常关闭回收的,也就有可能让系统进入一个非正常状态,出现各种未能预知的问题。

所以这个中断的执行还是要让运行的线程自己去执行。

另外的一个需要注意的地方是,就算是自己处理了那个intertupt的状态,也不能只是简单退出,而是要把最后抛出一个interruptException。因为interrupt的状态不应该是一个业务触发的状态,而是出现了一些非正常状态而需要中断的,interrupt的状态可能是当前逻辑触发,也有可能是未知的逻辑触发的。所以贸然去吃掉interrupt可能导致系统不能被中断的情况出现。同理如果是捕捉到interruptException也不能把它吃掉,而是要再往上抛。

你可能感兴趣的:(多线程和并发)