中断状态

中断状态与InterruptedExceptin异常的相互转换

时光怂恿深爱的人放手 提交于 2020-03-02 11:36:59
调用interrupt方法后,可以中断掉线程。这里所说中断掉线程,是指下面其中一种结果。 (1)线程变成“中断状态”对“状态”的反应; (2)抛出“异常InterruptedException”对“控制”的反应。 通常会使(1)。只有在线程是sleep、wait、join时会是(2)(这个时候不会变成中断状态)。 然而,状态(1)、(2)是可以相互转换的。也就是说,可以把(1)变为(2),也可以把(2)变为(1)。配合程序的需要——大致上就是为了让程序不至于忘记被中断的事实——而加以变化。 下面是具体的说明: 中断状态 -> InterruptedException异常的转换 “若线程是中断状态,就抛出InterruptedException异常”,可以像下面这样写。其中interrupted方法,是java.lang.Thread类的类方法。 if(Thread.interrupted()){ throw new InterruptedException(); } 在花时间的处理前,先加上这个if语句,可提高程序对中断的响应性。可以避免不知道自己已经被中断,还开始进行花时间的处理。 反倒是,这个if语句乍看之下很简单,要完全了解倒比想象中复杂许多。 哪个线程来检查interrupted方法 Thread.interrupted方法,会检查Thread.currentThread(