3、java多线程--Thread的三个中断相关方法

【原创代码,如有不足,欢迎指正!感谢!(* ̄︶ ̄) 】
【相互学习,天天向上】
【欢迎评论】
【一个没有天赋的女程序媛,今天又加油了!Fighting !】

Thread的三个中断相关方法:
1、interrupt(),设置线程的中断位为中断状态
2、isInterrupted()返回线程的中断位状态
3、interrupted()为static方法,返回当前线程的中断位状态,然后清除中断位
4、如果线程中断的时候发生中断异常,这时候jvm会清除线程的中断状态

/*
 * Thread的三个中断相关方法:
 * interrupt(),设置线程的中断位为中断状态
 * isInterrupted()返回线程的中断位状态
 * interrupted()为static方法,返回当前线程的中断位状态,然后清除中断位
 */
public class MyThreadRTest {

    public static void main(String[] args) throws InterruptedException {
        Runnable runnable = new Runnable() {

            public void run() {
                while (true) {
                    if (Thread.currentThread().isInterrupted()) {
                        System.out.println("线程被中断了");
                        break;
                    } else {
                        System.out.println("线程没有被中断");
                        try {
                            Thread.sleep(500);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                            //false,因为t0中断的时候处于sleep状态,抛出异常,清除了中断位
                            System.out.println(Thread.currentThread().getName());
                            System.out.println(Thread.currentThread().isInterrupted()+"  zzzz");
                        }
                    }

                }
            }
        };

        Thread t0 = new Thread(runnable);
        t0.start();

        System.out.println(t0.isInterrupted() + " xxxx");//false
        Thread.sleep(2000);

        t0.interrupt();//因为t0中断的时候处于sleep状态,抛出异常,清除了中断位

        Thread.sleep(2000);
        System.out.println(t0.isInterrupted() + " yyyy");//false,因为t0中断的时候处于sleep状态,抛出异常,清除了中断位


        System.out.println("end");
    }
}

输出结果

false xxxx
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
java.lang.InterruptedException: sleep interrupted
Thread-0
false zzzz
线程没有被中断
at java.lang.Thread.sleep(Native Method)
at com.yy.test.thread.MyThreadRTest$1.run(MyThreadRTest.java:21)
at java.lang.Thread.run(Unknown Source)
线程没有被中断
线程没有被中断
线程没有被中断
false yyyy
end
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
线程没有被中断
。。。。。。。。。。
由于中断的时候,t0处于sleep状态,发生中断异常,并清除了t0的中断状态,所以不能打印出线程被中断。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值