美文网首页工作生活
并发基础之线程中断

并发基础之线程中断

作者: 孤独而无用 | 来源:发表于2019-07-02 20:46 被阅读0次

    第一篇文章,讲一下线程中断的三个方法

    • void interrupt()方法是用来中断线程的;

    • boolean isInterrupted()方法是用来检测当前线程是否被终端,如果是返回true, 否则返回false;

    • boolean interrupted()方法 同上,但是如果发现当前线程被中断则会清除中断标志,该方法是static方法,可以通过类调用; 通过源码可知道在interrupted()内部是获取当前调用线程的中断标志而不是调用interrupted()方法的实例对象的中断标志

    下面通过一段代码阐述:

    Thread threadOne = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (;;);
                }
            });
    
            threadOne.start();
            threadOne.interrupt();
    
            System.out.println("isInterrupted:" + threadOne.isInterrupted());
            System.out.println("isInterrupted:" + threadOne.interrupted());
            System.out.println("isInterrupted:" + Thread.interrupted());
            System.out.println("isInterrupted:" + threadOne.isInterrupted());
    

    得出结果如下:

    isInterrupted:true
    isInterrupted:false
    isInterrupted:false
    isInterrupted:true
    

    这是为什么呢?
    第一条是获取threadOne线程当前的中断标志;
    第二条虽然调用了threadOne的interrupted()方法,但是获取的是主线程的也就是main thread的中断标志,因为主线程是当前线程;
    第三条不用解释了,你懂的;
    第四条也不用解释,threadOne的中断标志从来没被重置过,所以一直是true;

    与君共勉...

    相关文章

      网友评论

        本文标题:并发基础之线程中断

        本文链接:https://www.haomeiwen.com/subject/odxxhctx.html