notifyAll()
在查看Object 类下的方法的 javadoc 时,出现了以下几行:
如果当前线程在等待之前或期间被任何线程中断,则抛出 InterruptedException。在此对象的锁定状态已按上述恢复之前,不会引发此异常。
重点是:
当前线程在等待时被中断
这是什么意思?线程在等待时可以中断吗?如果是,为什么?它有什么用?
notifyAll()
在查看Object 类下的方法的 javadoc 时,出现了以下几行:
如果当前线程在等待之前或期间被任何线程中断,则抛出 InterruptedException。在此对象的锁定状态已按上述恢复之前,不会引发此异常。
重点是:
当前线程在等待时被中断
这是什么意思?线程在等待时可以中断吗?如果是,为什么?它有什么用?
Java中“线程被中断”的意思是线程的中断标志已经被设置,仅此而已。但是,JDK 的大多数使线程等待的方法会立即发现这一点并退出等待状态,并抛出 InterruptedException。您一直在阅读的方法就是这种情况。
如果另一个线程调用,一个线程可以在等待时被中断:
waitingThread.interrupt();
当然,如果您自己做,但如果您使用框架来管理您的线程,通常是执行程序服务,并调用一些中断底层线程的方法(例如shutdownNow
,或者如果您调用future.cancel(true);
由submit
方法)。
中断机制是 Java 如何让一个线程告诉另一个线程停止它正在做的事情,因此非常有用。