【发布时间】:2020-03-15 11:56:28
【问题描述】:
我有代码,作为忙碌等待的一部分,它需要等待一段时间(由于遗留代码,我无法更改那么多)。我已经阅读了为什么我应该在 [1] 和 [2] 中这样做的原因,并且它被呈现为不费脑筋的经验法则。总是这样做。 IIUC 它是根据需要出售的,因为调用堆栈上的一些代码可能会执行以下操作:
while (!Thread.currentThread().isInterrupted()) {
并且没有调用
Thread.currentThread().interrupt()
否则重新抛出它会失败。
现在回到我的案例。我称之为微小的方法睡眠。如果我在忙碌的等待中被吵醒,我不在乎,如果有必要我会再睡。如果真的有代码对线程中断标志感兴趣,我绝对不希望它启动,因为我不想停止这个操作,在这种情况下,不重试不设置标志的吞咽似乎是正确的操作,但是我没有看到任何提及,吞咽在某些情况下可能是正确的反应。
【问题讨论】:
-
“中途醒来”是什么意思?你被打电话给
interrupt()的人吵醒了。对此的预期反应是停止您正在做的事情并干净地终止您的工作。为什么你觉得有人打电话给interrupt()而不是真的? -
@RealSkeptic 也许他在考虑难以捉摸的虚假中断。如果它是遗留代码并且操作在运行时不容易正确关闭,我会吞下它(并假设它是虚假的)。但是我对代码库一无所知,那你为什么要听我的呢?
-
您可以在此处查看我的answer 到类似问题。也许对你会很方便。
标签: java concurrency