Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取终止的Java线程的中断状态?_Java_Multithreading_Interrupted Exception_Thread State - Fatal编程技术网

如何获取终止的Java线程的中断状态?

如何获取终止的Java线程的中断状态?,java,multithreading,interrupted-exception,thread-state,Java,Multithreading,Interrupted Exception,Thread State,我试图确定Java线程在终止时是否被中断。到目前为止,答案似乎是“不” 就在run()结束之前,我们可以看到Thread.currentThread().isInterrupted()是true 但是在join()ing目标线程之后,我们总是得到false: import static org.junit.Assert.*; import org.junit.Test; public class ThreadDeadInterruptStateTest { @Test public v

我试图确定Java线程在终止时是否被中断。到目前为止,答案似乎是“不”

就在
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();
    }
}

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

Thread.currentThread().isInterrupted()
a.isInterrupted()
是主线程的状态,因为您直接在
test
方法中执行它。你没有打断这个,你打断了
a
。因此,请检查
a
的状态:

Thread.currentThread().isInterrupted()
a.isInterrupted()

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

Thread.currentThread().isInterrupted()
a.isInterrupted()
是主线程的状态,因为您直接在
test
方法中执行它。你没有打断这个,你打断了
a
。因此,请检查
a
的状态:

Thread.currentThread().isInterrupted()
a.isInterrupted()

在修正了排版错误(谢谢!)之后,我们仍然有同样的问题
a.isInterrupted()
在联接后仍然为false!?!?!在修正了排版错误(谢谢!)之后,我们仍然有同样的问题
a.isInterrupted()
在联接后仍然为false!?!?!修正了打字错误。仍然中断。似乎是
join
调用清除了状态:。不过,我看不出这种行为在哪里被记录下来。我投票决定重新打开,但我会立即重新关闭,因为这是一个骗局:@AndyTurner你的搜索fu是strong修复了这个错误。仍然中断。似乎是
join
调用清除了状态:。不过,我看不出这种行为在哪里被记录下来。投票决定重新打开,但我会立即重新关闭,因为这是一个骗局:@AndyTurner你的搜索功能很强大