Thread类里面的interrupt()的用法(简单用法)

1、先把代码占上再来说明问题.

class Demo implements Runnable{
      public void run(){
       try{
      System.out.println("**********************in run()-这个线程休眠20秒");
       Thread.sleep(20000);
      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 Test7{
        public static void main(String[] args){
             Demo d=new Demo();
             Thread t=new Thread(d);
             t.start();

             try{
                 Thread.sleep(2000);
}catch(Exception e){
              
               }
               System.out.println("**********************in main()-中断其他线程!");
              t.interrupt();
               System.out.println("**********************in main()-退出!");
             }
            }

输出的结果是:

**********************in run()-这个线程休眠20秒
**********************in main()-中断其他线程!
**********************in main()-退出!
**********************in run()-中断线程!
**********************in run()-休眠以后继续进行!
**********************in run()-正常退出

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&


2、

class Demo implements Runnable{
      public void run(){
       try{
      System.out.println("**********************in run()-这个线程休眠20秒");
       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 Test7{
        public static void main(String[] args){
             Demo d=new Demo();
             Thread t=new Thread(d);
             t.start();

             try{
                 Thread.sleep(20000);
}catch(Exception e){
              
               }
               System.out.println("**********************in main()-中断其他线程!");
              t.interrupt();
               System.out.println("**********************in main()-退出!");
             }
            }

答案是:

**********************in run()-这个线程休眠20秒
**********************in run-继续进行!
**********************in run()-休眠以后继续进行!
**********************in run()-正常退出
**********************in main()-中断其他线程!
**********************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()方法的简单用法!!!

你可能感兴趣的:(java基础)