zoukankan      html  css  js  c++  java
  • interrupt 方法

    简述

      interrupt方法用于打断sleep,wait,join的线程,interrupt不会真的中断线程,它的本质只是设置一个中断状态,让该被打断线程决定如何结束。

    阻塞状态

      当线程处于sleep,wait,join等阻塞状态时,interrupt方法会清空打断状态,并抛出InterruptedException异常。我们需要注意的是,Java中凡是抛出InterruptedException的方法(再加上Thread.interrupted()),都会在抛异常的时候,将interrupt flag重新置为false。

      这也就是说,当一个线程B被中断的时候(比如正在sleep()),它会结束sleep状态,抛出InterruptedException,并将interrupt flag置为false。这也就意味着,此时再去检查线程B的interrupt flag的状态,它是false,不能证明它被中断了,现在唯一能证明当前线程B被中断的证据就是我们现在catch到的InterruptedException。如果我们不负责任地直接把这个InterruptedException扔掉了,那么没有人知道刚刚发生了中断,没有人知道刚刚有另一个线程想要让线程B停下来,这是不符合程序的目的的:别的线程想让它停下来,而它直接忽略了这个操作。

    打断正在运行的线程

      interrupt不会真的打断正在运行的线程,他会将线程的打断状态设置为true。如果该线程想停止,则检测到打断状态为true进行停止即可。

    两阶段终止

      在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个"料理后事""的机会,即让T2完成善后工作后终止

      我们在catch到异常和检查到打断标记为true的时候就可以料理后事,然后终止即可。

    一点一点积累,一点一点蜕变!
  • 相关阅读:
    Array.prototype.slice.call()
    闭包与变量
    XML处理指令
    XSLT学习(九)通过JavaScript转化xml
    chrome浏览器canvas画图不显示
    B.储物点的距离
    A.约数个数的和
    F.求最大值
    STVD+COSMIC编译工程时出现Error creating process for executable mapinfo
    STVD+COSMIC编译工程时can't open file crtsi0.sm8
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/15063755.html
Copyright © 2011-2022 走看看