当序言提到如何终止线程时,一些读者通常会立即想到该方法是停止(),但是不建议使用stop()方法(禁止许多规格)。原因是要强制终止线程,将导致过程的结束异常,资源未正确发布,程序结果是不正确的。目前,采用的方法是终止的**** Intrupt()方法。此方法等效于修改共享变量的值,应在操作期间。线程的当前值继续运行。如果有一个地方调用当前线程的Interrupt()方法,则此值将变为真。目前,当前线程可以根据此值的修改正确终止线程的操作。
API主要提供与java.lang.thread中线程中断相关的以下方法。下表显示了特定的方法名称和主要角色。
public void Interrupt()中断该线程公共静态布尔值()以测试当前线程是否被中断。不要还原(clear)中断徽标私人本机boolean is Diented(boolean clear intered);中断()和ISIntered()最终通话。此方法是天然的局部方法。参数clear中断是指是否还原(清除)中断徽标源中断()和Isintered()。
指示
让我们首先验证中断的异常响应,并引入以下两种方法的使用。请注意,跑步者中的运行方法有些差异
方法一
输出结果
您可以看到该线程在执行后终止
方法两个
输出结果
您可以看到主线程中启动的T1线程被中断。捕获异常后,未进行治疗,线程继续连续运行
总结以上两种方法
方法和方法两个。通过判断螺纹的值(currentThread()的值来确定运行方法的逻辑。is Interrupted()。IsIntrupted()变为false;在方法1的方法1中,线程阻塞将响应中断,但此时我只缓存异常,并且没有处理中断。这里有一个知识点,即当线程响应中断从异常中抛出时,它将恢复(清晰的)中断符号,因此,T1.Interrupt()修改中断徽标的修改再次恢复,并且程序仍然是连续运行。
接下来,让我们验证删除Interrupt()
输出结果
这证明中断()并未明确中断。线程中断thread.interrupt()后,执行线程。
修改thread.currenthread()。在上面的捕获中insindrupted(),以运行到thread.intrupted()
输出结果
该线程还响应了thread.interrupt()的中断,但是由于catch中调用了thread.intrupted(),因此清除了中断徽标,因此thread.currenthread()。IsIntrupted()仍然等于true,线程继续连续连续
看到这一点,我们应该了解这两种方法的主要区别和使用。最后,让我们看一下下一个源代码中的用例。我们通过在AbstractQuedsysynchnchronizer(aqs)中观看“ aqs中的eakeait()方法”来查看其在源代码中的使用。
AbstractQueedSynChronizer(aqs)源代码使用static thread.Intrupted()确定当前线程是否中断并恢复中断徽标。删除徽标的作用是为了当前线程对中断的响应,以及以下内容 -当您再次输入时,可以执行UP操作。
作者:李Ziyi