【发布时间】:2015-04-17 04:00:30
【问题描述】:
如果我创建自己的线程(即不是线程池)并且在某处调用sleep 或任何其他可中断方法,是否可以忽略 InterruptedException 如果我知道代码中没有其他人正在执行中断在线程上。
换句话说,如果线程应该与 JVM 一样长,这意味着线程不可中断,那么假设 InterruptedException 永远不会被调用是否安全,因此异常可以被吞了吗?
【问题讨论】:
-
我认为实际的问题是:在没有代码生成的情况下,JVM 是否曾经抛出 InterruptedException(通过
Thread.interrupt()等) -
是的。这是另一种说法。但我也想探索“是否有一个不间断线程的用例”方面
-
反过来问:“如果我总是正确处理
InterruptedExceptions,我的线程是否安全?” - 回答:不。有不可中断的 (API-) 例程,例如阻塞 IO,这将使在InterruptedExceptions 上的每一次善意尝试都是徒劳的。因此,忽略InterruptedExceptions 通常不会破坏任何东西,即它是“安全的”。正如其他人所说,它很少是“可取的”。 -
一些不直接“处理”您的代码的容器/运行时包装器可能需要中断线程。例如,我正在使用 maven exec 插件,在我对吞下中断的异常进行更改后,当我尝试使用 sigterm 或
^C停止程序时,maven 会窒息。
标签: java multithreading exception-handling thread-safety interrupted-exception