我有一个线程,它有一个传入的作业队列(一个包含作业描述的LinkedList).当没有任务可以工作时,线程在队列中等待().当外部作业调度器对象在队列中放置新作业时,会用notify()唤醒它.
在我的程序关闭时,我在Thread上调用interrupt().当线程等待wait()中的作业时,这会引发InterruptedException.我的问题是:如果我中断线程,而不是阻塞但做某种工作,那么会发生什么,处理的项目是队列中的最后一个(所以队列现在是空的),并且在中断之前执行isInterrupted()检查标志设置好,它再次调用wait()?它会抛出一个InterruptedException,因为中断的标志已经设置或线程永远等待,因为新的作业永远不会到达队列,没有人打断等待?
解决方法
是的,你中断的线程会在调用wait()时抛出一个InterruptedException异常.这是很简单的测试自己.
public class TestInt { public static void main(String[] args) throws Exception { Thread.currentThread().interrupt(); synchronized(TestInt.class) { TestInt.class.wait(); } } }
还要注意Objectodwait()的javaodc:
InterruptedException – if any thread interrupted the current thread before or while the current thread was waiting for a notification. The interrupted status of the current thread is cleared when this exception is thrown.