剑指Offer(线程)——如何中断线程

之前我们通常会使用stop来停止线程但是这种方法是不安全的,这是因为一个线程会影响另外一个线程,使线程本应该满足的原子性存在无法满足的可能了。假设线程A调用stop停止了线程B,一般情况下线程是不进行通信的这样就会让线程B释放可能还有用的锁这样就会导致数据不同步的问题。。

现在使用最多的是interrupt。

它的用处不是中断线程而是通知线程应该去中断但是最后中断还是不中断是由线程自己去判断的,这个yield的性质是一样的。

具体来说一下:

  1. 如果线程处于被阻塞(sleep、wait、join)状态,那么线程立刻退出被阻塞状态,并抛出一个interruptedException异常;
  2. 如果线程处于正常活动状态,那么会将该线程的中断标志设置为true,被设置的中断标志的线程将继续执行不受影响。

因此中断线程需要Thread去配合才可以真正的中断线程。

  1. 在正常运行任务的时候经常检查本线程的中断标志位,如果被设置中度标志就会自行停止线程;
  2. 如果线程处于正常活动状态,那么会将该线程的中断标志设置为true,被设置中断标志的线程将会继续执行,不受到影响。
发布了242 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44240370/article/details/104106061