Concurrency
interruption: Thread.interruptedは割り込みフラグをclearする
Thread.interruptedは現在の割り込み状態を返した後、そのフラグをclearします。
SourceInterruptFlags.java
Java 21
package examples.interruption;
public final class InterruptFlags {
private InterruptFlags() {}
public static boolean consumeCurrentThreadInterrupt() {
return Thread.interrupted();
}
}TestInterruptFlagsTest.java
Java 21
package examples.interruption;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
class InterruptFlagsTest {
@Test
void ThreadInterruptedは現在の割り込み状態を返してclearする() {
try {
Thread.currentThread().interrupt();
assertTrue(InterruptFlags.consumeCurrentThreadInterrupt());
assertFalse(Thread.currentThread().isInterrupted());
} finally {
Thread.interrupted();
}
}
}01Assertion
このテストで確認できること
- 現在のスレッドへinterruptを設定する
- Thread.interruptedの呼び出し後にisInterruptedはfalseになる
割り込みを検査するAPIには、状態を読むだけのisInterruptedと、読むとclearするThread.interruptedがあります。中断方針に合わせて使い分けます。
OBSERVED RESULT
expected: interrupted() → true
expected after call: isInterrupted() → false