Java多线程(5) interrupt

一.简述

interrupt()不会中断一个正在运行的线程方法实际完成的是:在线程受到阻塞时抛出一个中断信号,线程就得以退出阻塞的状态。

     更确切的说,
     如果线程被Object.wait,Thread.join,Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。、
      如果线程没有被阻塞,这时调用interrupt()将不起作用。
     线程A在执行sleep,wait,join时,线程B调用A的interrupt方法,的确这个时候A线程会有InterruptedException异常抛出来,但其实这是在sleep,wait,join这些方法内部不断的检查中断状态的值,而自己抛出的InterruptedException异常
     如果线程A正在执行一些指定的操作(如赋值、for、while、if、调用方法等)时,就不会去检查中断状态,所以线程A也就不会抛出InterruptedException异常,而会一直执行着自己的操作。当线程A执行到wait(),sleep(),join()时,就会马上抛出InterruptedException异常。

二.场景和使用方法

public class InterruptedTest {

    public static void main(String[] args) {
        MyThread_1 t1=new MyThread_1();
        MyThread_1 t2=new MyThread_1();
        t2.setPriority(Thread.MAX_PRIORITY);
        t2.setPriority(Thread.MIN_PRIORITY);
        t1.start();
        t1.interrupt();
        System.out.println("111");
        //t1.start();
        //t1.interrupt();

    }
}

class MyThread_1  extends   Thread
{
   public  void run()
   {
       int a;
       try {
           for(int i=0;i<10000;i++)
           {
               a=i*i;
               System.out.println(i);
           }
           System.out.println("step_1");
           //interrupt();
           sleep(5000);
           System.out.println("step_2");
       }
       catch(InterruptedException e) {
           System.out.println("InterruptedException");
       }
       catch (Exception e)
       {

       }

   }
}

中断是强行终止的,所以会抛出异常,针对长时间sleep(),wait可以得到有效的终止

     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值