日期:2014-05-20  浏览次数:20721 次

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()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况…