InterruptedIOException 是否将线程的 Interrupted 标志设置为 true?
Does InterruptedIOException set the Interrupted flag of the thread to true?
我的代码中出现中断异常,我正在尝试了解原因。
我试图通过调用 FilesUtils.filesMethod() 在我的文件系统中的某个位置创建文件。
如果我收到 IOException,我会尝试休眠 100 毫秒。
在睡眠期间我需要检查我是否被打断了(因为InterruptedException是睡眠时的检查异常)。
如果是这样我打印"Got interrupted"并将当前线程的中断标志设置为真。
我正在 "Got interrupted" 打印到我的日志中。
在我的代码中没有任何地方有这个线程的命令 interrput()。
会是什么?
这个senario是否有意义:
ilesUtils.filesMethod() 的方法抛出 InterruptedIOException,因为流已在线程脚下关闭。此外,此 InterruptedIOException 将 Interrupted 标志设置为 true。
我在 catch 中捕获了 InterruptedIOException (IOException e)。
睡眠检查中断标志是否为真。它是(见 1)所以它抛出 InterruptedException。
难道是这样吗?
try {
FilesUtils.filesMethod();
break;
} catch (IOException e) {
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e1) {
log.info("Got interrupted", e1);
Thread.currentThread().interrupt();
}
}
在不知道您 FilesUtils.filesMethod()
的实现细节的情况下,我们只能猜测这里发生了什么。
但是只是抛出 InterruptedIOException
不会导致设置中断标志。
我猜 FilesUtils.filesMethod()
在抛出 InterruptedIOException
之前设置了 interrupt 标志,然后 sleep
方法抛出 InterruptedException
(因为设置了中断标志) .
你可以在调用睡眠方法之前用Thread.interrupted()清除中断标志(如果你想在这种情况下能够睡眠)。所以睡眠方法不会抛出InterruptedException
。(如果线程没有再次被中断)
我的代码中出现中断异常,我正在尝试了解原因。
我试图通过调用 FilesUtils.filesMethod() 在我的文件系统中的某个位置创建文件。
如果我收到 IOException,我会尝试休眠 100 毫秒。 在睡眠期间我需要检查我是否被打断了(因为InterruptedException是睡眠时的检查异常)。
如果是这样我打印"Got interrupted"并将当前线程的中断标志设置为真。
我正在 "Got interrupted" 打印到我的日志中。
在我的代码中没有任何地方有这个线程的命令 interrput()。
会是什么?
这个senario是否有意义:
ilesUtils.filesMethod() 的方法抛出 InterruptedIOException,因为流已在线程脚下关闭。此外,此 InterruptedIOException 将 Interrupted 标志设置为 true。
我在 catch 中捕获了 InterruptedIOException (IOException e)。
睡眠检查中断标志是否为真。它是(见 1)所以它抛出 InterruptedException。
难道是这样吗?
try {
FilesUtils.filesMethod();
break;
} catch (IOException e) {
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e1) {
log.info("Got interrupted", e1);
Thread.currentThread().interrupt();
}
}
在不知道您 FilesUtils.filesMethod()
的实现细节的情况下,我们只能猜测这里发生了什么。
但是只是抛出 InterruptedIOException
不会导致设置中断标志。
我猜 FilesUtils.filesMethod()
在抛出 InterruptedIOException
之前设置了 interrupt 标志,然后 sleep
方法抛出 InterruptedException
(因为设置了中断标志) .
你可以在调用睡眠方法之前用Thread.interrupted()清除中断标志(如果你想在这种情况下能够睡眠)。所以睡眠方法不会抛出InterruptedException
。(如果线程没有再次被中断)