美文网首页
问题:什么是线程的中断标志,如何设置和检查它,它是如何和中断异常

问题:什么是线程的中断标志,如何设置和检查它,它是如何和中断异常

作者: Dream_Lin | 来源:发表于2019-01-22 14:12 被阅读6次

问题

什么是线程的中断标志,如何设置和检查它,它是如何和中断异常相关的

答案

线程的中断标志

线程的中断标志,是每个线程内部的一个标志,是每个线程对象内部的一个成员变量,这个标志要么是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.

相关文章

网友评论

      本文标题:问题:什么是线程的中断标志,如何设置和检查它,它是如何和中断异常

      本文链接:https://www.haomeiwen.com/subject/tyvljqtx.html