1.interrupt()作为中断程序,并不会直接终止运行,而是设置中断状态,由线程自己处理中断。可以选择终止线程。等待新任务或继续执行。
2.interrupt()经常用于中断处于堵塞状态的的线程,如sleep,wait,join 。
3.当线程检查出有中断状态设置 时,sleep,wait,join 将会抛出异常清除中断状态。
下面举两个例子:
直接调用interrupt(),但没有中断线程:
1 package demo1; 2 3 public class demo4 extends Thread{ 4 5 private int x=0; 6 public void run() { 7 while (true) { 8 System.out.println("zhc cool"); 9 for(int i=0;i<9;i++) { 10 x=(int)(Math.random()*100); 11 } 12 } 13 } 14 public static void main(String[] args) throws Exception{ 15 Thread s=new demo4(); 16 System.out.println("start"); 17 s.start(); 18 s.sleep(3000); 19 System.out.println("try to stop"); 20 s.interrupt(); 21 Thread.sleep(3000); 22 23 } 24 25 }
这个程序的结果是无法终止线程的运行,结果如下:
start
zhc cool
zhc cool
zhc cool
zhc cool
zhc cool
zhc cool
zhc cool
zhc cool
zhc cool
try to stop
zhc cool
zhc cool
。。。。
然后看下面的程序
1 public class demo4 extends Thread{ 2 3 4 public void run() { 5 try { 6 sleep(3000); 7 } 8 catch(InterruptedException e) { 9 System.out.println(e.getMessage()); 10 } 11 } 12 public static void main(String[] args) throws Exception{ 13 Thread s=new demo4(); 14 15 s.start(); 16 System.out.println("请输入任意键结束进程"); 17 System.in.read(); 18 s.interrupt(); 19 System.out.println("stop"); 20 21 }
这样就可以结束线程的运行。