class Demo implements Runnable{
public void run(){
try{
System.out.println("**********************in run()-这个线程休眠20秒");
Thread.sleep(20000); //Thread.sleep(2000);
System.out.println("**********************in run-继续进行!");
}catch(Exception e){
System.out.println("**********************in run()-中断线程!");
}
System.out.println("**********************in run()-休眠以后继续进行!");
System.out.println("**********************in run()-正常退出");
}
}
public class InterruptThread{
public static void main(String[] args){
Demo d=new Demo();
Thread t=new Thread(d);
t.start();
try{
Thread.sleep(2000);//Thread.sleep(20000)'
}catch(Exception e){
}
System.out.println("**********************in main()-中断其他线程!");
t.interrupt();
System.out.println("**********************in main()-退出!");
}
}
/*
说明代码1与代码2
注意上面的时间一个是2000,一个是20000.换了一下位置。这样就会造成不一样的结果。
3、为什么会这样那?
因为上面的代码都是多线程的,因为main方法就是一个线程。main方法的线程和其他方法线程是交替运行的,不分优先级。在main方法里面用了一个interrupt()方法,它的作用就是,中断线程的作用。
方法1、里面在main方法中Thread.sleep(2000);休眠的时间比较短。而run方法里面Thread.sleep(20000);休眠的时间比较长。因为main线程与run线程是等级的。所以main()方法休眠了一会以后,run()还休眠中。这样就会造成main()方法有机会去执行t.interrupt();这样就中断了线程。造成了run()方法会报异常。
如果main()方法里面的Thread.sleep(20000)改成2万。这样会等到run()线程运行完后,才去调用t.interrupt();,不会造成run()方法线程的中断。
这就是简单的interrupt()方法的简单用法!!!*/