2013-06-02 82 views
1

Thread类的方法,我有这段代码中断在Java中

Thread1 t1 = new Thread1();//obviously Thread1 extends Thread 
     t1.start(); 

     System.out.println(t1.isInterrupted()); 

结果是“假” ;

在另一方面,如果我删除throw new InterruptedException();,我尝试从主要方法中断它,它给了后面的结果,我预计:

Thread1 t1 = new Thread1(); 
     t1.start(); 
     t1.interrupt(); 
System.out.println(t1.isInterrupted()); 

它会返回“真”。

这只是一个一致性内存问题,或者我在代码中做错了什么? 在此先感谢。

编辑:我编辑的问题删除方法连接()如JB Nizet指出仍然存在的问题仍然存在。

+0

什么也正是线程1的代码?它是你的第一个片段中的代码吗? –

+0

缺少最后的“}”,现在编辑。是的,它只是一个简单的测试,以查看在创建的线程的main()方法中还是从run()方法中调用interrupt()是否是相同的事情。 – Rollerball

回答

4

抛出InterrupedException不会设置中断标志。捕捉它并不能清除它。

interrupted()是一种静态方法,它告诉当前线程是否中断。

此外,测试线程在加入后是否中断将始终返回false,因为join()会清除中断标志。

+0

对不起我的错我打算写isInterrupted();现在编辑 – Rollerball

+0

看到我编辑的答案。关于“InterruptedException不设置中断标志”的 –

+0

。查看清单3.在捕获此链接上的InterruptedException之后恢复中断状态http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html – Rollerball

1

accordin到doc

按照惯例,抛出 InterruptedException的退出任何方法清除中断状态,当它这样做。但是, 通过另一个线程调用中断,中断状态总是会立即被设置为 。

而且Thread.join抛出InterruptedException的

+0

好的tnx,所以我在这篇文章中出错了?清单3。在此链接上捕获InterruptedException后恢复中断状态ibm.com/developerworks/java/library/j-jtp05236/index.html – Rollerball