0

我正在尝试确定 Java 线程interrupted在终止时是否存在。到目前为止,答案似乎是“不”......

run()就在我们可以看到Thread.currentThread().isInterrupted()的尽头脱落之前true

但是在join()ing 目标线程之后,我们总是得到false

import static org.junit.Assert.*;
import org.junit.Test;

public class ThreadDeadInterruptStateTest {
    @Test public void test() {
        Thread a = new Thread(new Runnable() {
            @Override public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                } finally {
                    // 2x to show that check doesn't reset status
                    assertTrue("Interrupt status from a 1: ",  // pass
                            Thread.currentThread().isInterrupted());
                    assertTrue("Interrupt status from a 2: ",  // pass
                            Thread.currentThread().isInterrupted());
                }
            }});
        a.start();
        a.interrupt();
        try {
            a.join();
            assertEquals("Thread state", a.getState(),
                    Thread.State.TERMINATED);  // pass
            assertTrue("Interrupt status after join: ",
                    a.isInterrupted());  // Still FAILs :-(
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

    public static void main(String[] args) {
        new ThreadDeadInterruptStateTest().test();
    }
}
4

1 回答 1

4

您正在检查错误线程的状态:

Thread.currentThread().isInterrupted()

是主线程的状态,因为你直接在test方法内部执行。你没有打断这个,你打断了a。因此,检查a的状态:

a.isInterrupted()
于 2017-02-23T08:19:58.623 回答