问题
什么是线程的中断标志,如何设置和检查它,它是如何和中断异常相关的
答案
线程的中断标志
线程的中断标志,是每个线程内部的一个标志,是每个线程对象内部的一个成员变量,这个标志要么是true,要么是false,.线程的中断并不是自发产生的,而是其它线程向本线程发出的一个指令,这个标志用来表示线程是否被中断,标志为true代表线程收到了中断指令,false则代表线程没有收到中断指令
如何设置和检查(获取)
一个线程通过引用另外一个线程,调用thread.interrupt()
方法来中断另外一个线程.一旦调用了thread.interrupt()
方法,另外一个线程的中断标志位就会被设置为true.线程通过使用Thread.interrupted()
方法来检查是否线程被中断,或者调用thread.isinterrupted()
方法来检查是否线程被中断.需要注意的是调用Thread.interrupted()
方法会获取线程的中断标志位后清除线程的中断标志位,将其置为false,调用thread.isinterrupted()
只会获取线程的标志位,而不会清除中断标志位.
如何和中断异常相关
-
当线程调用了一个可能抛出
InterruptedExcepiton
的方法的时候(比如join()
,wait()
,sleep()
),在这些方法内部中,会不断的检查是否收到中断指令(中断标志位为true),一旦为true,则抛出一个InterruptedExcepiton
异常.线程负责在catch()
方法处理异常捕获的逻辑. -
当线程没有执行上面的几个可能抛出
InterruptedException
的方法的时候,要想检查是否被中断,只能线程主动的调用Thread.interrupted()
或者thread.isinterrupted
去获取线程中断标志位的状态,如果为true则表示收到中断指令(上述几个方法内部实现了这种逻辑),至于是否要抛出InterruptedException
则由本线程自己决定,但通常是要抛出一个InterruptedException
.
网友评论