java线程中的interrupt,isInterrupt,interrupted方法

在java的线程Thread类中有三个方法,比较容易混淆,在这里解释一下(1)interrupt:置线程的中断状态(2)isInterrupt:线程是否中断

(3)interrupted:返回线程的上次的中断状态,并清除中断状态

举个例子:

[java] view plain

一般来说,阻塞函数,如:Thread.sleep、Thread.join、Object.wait、LockSupport.park等在检查到线程的中断状态时,会抛出InterruptedException,同时会清除线程的中断状态对于InterruptedException的处理,可以有两种情况:(1)外层代码可以处理这个异常,直接抛出这个异常即可(2)如果不能抛出这个异常,比如在run()方法内,因为在得到这个异常的同时,线程的中断状态已经被清除了,需要保留线程的中断状态,,则需要调用Thread.currentThread().interrupt()另外,Thread.interrupted()在jdk库的源代码中比较常用,因为它既可以得到上一次线程的中断标志值,又可以同时清除线程的中断标志,一举两得,但同时也有坏处,就是这个函数有清除中断状态的副作用,不容易理解

我诚恳地希望能够获得你的原谅。只是你懂得的,对于有一些委屈,

java线程中的interrupt,isInterrupt,interrupted方法

相关文章:

你感兴趣的文章:

标签云: