Interrupt到底是什么意思
比如说:以下线程中run的一点代码
try {
   this.interrupt();//-----------------------1
   System.out.println("after interrupt")://--------------2
   sleeper.join();//------------------------3
 } catch(InterruptedException e) {
   print("Interrupted");
 }我本来的理解为当程序执行到每1句的时候下面两句就不会执行,结果确实也没有执行,但是,既然第三句没有执行,那为什么还会抛出interruptedException?
难道这个interruptedException到底是什么时候抛出来的?

解决方案 »

  1.   

    这个好像和try catch运行的机制有关系
      

  2.   

    interrupt是对线程处在sleep,wait,join状态的时候才起作用。
    楼主代码其实线程还在运行
      

  3.   

    interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。如果线程没有被阻塞,这时调用interrupt()将不起作用;否则,线程就将得到异常(该线程必须事先预备好处理此状况),接着逃离阻塞状态。
      

  4.   


    补充:
    InterruptedException 是在执行join时抛出的. 因为线程已经Interrupt所以join操作不可能再执行下去了.你可以再试试加个after join的提示, 它一定是输不出来的.
      

  5.   

    应该是我还没有能区分用runnable定义的“任务”,与驱动它的线程Thread的区别我的意思是这样的:
    如果interrupt没有中断一个线程的话(好像是做了一个interrupt标记)为什么第二句
    System.out.println("after interrupt")://--------------2 
    也没有执行输出。如果说连第2句都没执行到的到,线程又怎么执行到第3句
    sleeper.join();//------------------------3 
    的?既然没执行到第3句的话,程序怎么知道“线程受到阻塞”的?是不是跟异常处理机制有关?