【问题标题】:Interrupted Exception occurrence reason中断异常发生原因
【发布时间】:2013-06-30 07:23:03
【问题描述】:

在查看 Object 类下 notifyAll() 方法的 javadoc 时,出现了以下几行:

如果当前线程在等待之前或期间被任何线程中断,则 抛出中断异常。在此对象的锁定状态已按上述恢复之前,不会引发此异常。

重点是:

当前线程在等待时被中断

这是什么意思?线程在等待时可以中断吗? 如果是,为什么?它有什么用?

【问题讨论】:

  • 表示中断等待状态。

标签: java interrupted-exception


【解决方案1】:

Java中“线程被中断”的意思是线程的interrupted标志已经被设置,仅此而已。但是,JDK 的大多数使线程等待的方法会立即发现这一点并退出等待状态,并抛出 InterruptedException。您一直在阅读的方法就是这种情况。

【讨论】:

    【解决方案2】:

    如果另一个线程调用,一个线程可以在等待时被中断:

    waitingThread.interrupt();
    

    当然,如果您自己执行此操作,但如果您使用框架来管理您的线程,通常是执行程序服务,并调用一些中断底层线程的方法(例如 shutdownNow 或如果您调用future.cancel(true); 在由 submit 方法返回的 Future 上)。

    中断机制是 Java 如何让一个线程告诉另一个线程停止它正在做的事情,因此非常有用。

    【讨论】:

    • 其实只有cancel(true) :-)
    • 确实:中断机制声明“停止正在做的事情”,
    • 确实:中断机制声明“停止它正在做的事情”,那么它在等待时实际上在做什么。我认为它正在等待资源,所以它是获取资源还是进入运行/可运行状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多