锁定老帖子 主题:多线程 interrupt() 中断
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-17
public class c { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub A aa = new A(); aa.start(); try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(aa.isInterrupted()); aa.interrupt();// 中断 System.out.println(" isInterrupted();" + aa.isInterrupted()); } } public class A extends Thread { public A(){ } public void run(){ while(!Thread.currentThread().isInterrupted()){ System.out.println("A 在中断前:"+Thread.currentThread().isInterrupted()); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block System.out.println("--A 在中断异常---:"+isInterrupted()); e.printStackTrace(); } } } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-18
} catch (InterruptedException e) {
// TODO Auto-generated catch block System.out.println("--A 在中断异常---:"+isInterrupted()); e.printStackTrace(); } 这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下 |
|
返回顶楼 | |
发表时间:2011-10-18
Thread#interrupt() 并不会强制线程中断,它只是向这个线程发送中断信号。
需要这个线程自己接受中断信号,并执行中断操作。 |
|
返回顶楼 | |
发表时间:2011-10-18
agapple 写道 } catch (InterruptedException e) {
// TODO Auto-generated catch block System.out.println("--A 在中断异常---:"+isInterrupted()); e.printStackTrace(); } 这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下 interrupt响应为InterruptedException后就会被重置,如果线程有被重置带你,那应该就退出程序了,可是程序没退出 |
|
返回顶楼 | |
发表时间:2011-10-18
s929498110 写道 Thread#interrupt() 并不会强制线程中断,它只是向这个线程发送中断信号。
需要这个线程自己接受中断信号,并执行中断操作。 sleep 还是会被中断的,而且也跑出异常,如果线程不接受中断,应该是不抛出异常 程序代码输出; A 在中断前:false false C:isInterrupted();true --A 在中断异常---:false java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at A.run(A.java:22) A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false A 在中断前:false |
|
返回顶楼 | |
发表时间:2011-10-18
lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field |
|
返回顶楼 | |
发表时间:2011-10-18
gtssgtss 写道 lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field 那为什么C中输出的a.isinterrupted(),跟程序A 中Thread.currendThread.isinterrupted()补一样啊 |
|
返回顶楼 | |
发表时间:2011-10-18
chinadeng 写道 gtssgtss 写道 lz不懂interrupt是什么
interrupt默认情况只做了一件事,就是改了一个boolean的field 那为什么C中输出的a.isinterrupted(),跟程序A 中Thread.currendThread.isinterrupted()补一样啊 因为被sleep改了啊 |
|
返回顶楼 | |
发表时间:2011-10-18
我认为 执行interrupt 会抛出一个中断异常。而且中断线程就是靠这个异常机制执行的。如果把这段代码TRY CATCH了。中断当然就停止了。
|
|
返回顶楼 | |
发表时间:2011-10-19
agapple 写道 } catch (InterruptedException e) {
// TODO Auto-generated catch block System.out.println("--A 在中断异常---:"+isInterrupted()); e.printStackTrace(); } 这里加一段Thread.currentThread().interrupt(); interrupt响应为InterruptedException后就会被重置,需要重新设置下 这个是才是真理! |
|
返回顶楼 | |