读书人

java 中一个线程被 Interrupt 后意味着

发布时间: 2012-02-22 19:36:54 作者: rapoo

java 中一个线程被 Interrupt 后意味着什么? 多线程或异常处理的高手帮帮忙了,实在弄不清楚了
Interrupt到底是什么意思
比如说:以下线程中run的一点代码
try {
this.interrupt();//-----------------------1
System.out.println("after interrupt")://--------------2
sleeper.join();//------------------------3
} catch(InterruptedException e) {
print("Interrupted");
}

我本来的理解为当程序执行到每1句的时候下面两句就不会执行,结果确实也没有执行,但是,既然第三句没有执行,那为什么还会抛出interruptedException?
难道这个interruptedException到底是什么时候抛出来的?

[解决办法]
这个问题很好,我也觉得不该抛出异常来~
[解决办法]
这个好像和try catch运行的机制有关系
[解决办法]
interrupt是对线程处在sleep,wait,join状态的时候才起作用。


楼主代码其实线程还在运行
[解决办法]

[解决办法]
interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。

如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
[解决办法]

探讨
interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。

如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况…

读书人网 >J2SE开发

热点推荐