zoukankan      html  css  js  c++  java
  • 1.7.2判断线程是否是停止状态

    判断线程是否停止的状态

    Thread.java类里面提供了两种方法。

    1)this.interrupted():测试当前线程是否已经中断

    2)this.isInterrupted():测试线程是否已经中断

    测试如下

    package com.cky.thread;
    
    /**
     * Created by edison on 2017/11/28.
     */
    public class MyThread11 extends  Thread{
        @Override
        public void run() {
            super.run();
            for (int i = 0; i < 50000; i++) {
                System.out.println("i="+i);
            }
        }
    }
     1 package com.cky.test;
     2 
     3 import com.cky.thread.MyThread11;
     4 
     5 /**
     6  * Created by edison on 2017/11/28.
     7  */
     8 public class Test18 {
     9     public static void main(String[] args) {
    10         try {
    11             MyThread11 th = new MyThread11();
    12             th.start();
    13             Thread.sleep(2000);
    14             th.interrupt();
    15             System.out.println("是否停止1="+ th.isInterrupted());
    16            System.out.println("是否停止2="+ th.isInterrupted());
    17         } catch (InterruptedException e) {
    18             e.printStackTrace();
    19         }
    20     }
    21 }
    i=49990
    i=49991
    i=49992
    i=49993
    i=49994
    i=49995
    i=49996
    i=49997
    i=49998
    i=49999
    是否停止1=false
    是否停止2=false

    结果分析:

    结果表面当前线程并未停止,因为这个当前线程是main线程,所以打印了两个false.

    测试

     1 package com.cky.test;
     2 
     3 /**
     4  * Created by edison on 2017/11/28.
     5  */
     6 public class Test19 {
     7     public static void main(String[] args) {
     8         Thread.currentThread().interrupt();
     9         System.out.println("是否停止1="+Thread.interrupted());
    10         System.out.println("是否停止2="+Thread.interrupted());
    11         System.out.println("end");
    12 
    13     }
    14 }
    1 C:itsoftjdkinjava -Didea.launcher.port=7534 "-Didea.launcher.bin.path=C:itsoftideaIntelliJ IDEA 2016.3.3in" -Dfile.encoding=UTF-8 -classpath "C:itsoftjdkjrelibcharsets.jar;C:itsoftjdkjrelibdeploy.jar;C:itsoftjdkjrelibextaccess-bridge-32.jar;C:itsoftjdkjrelibextcldrdata.jar;C:itsoftjdkjrelibextdnsns.jar;C:itsoftjdkjrelibextjaccess.jar;C:itsoftjdkjrelibextjfxrt.jar;C:itsoftjdkjrelibextlocaledata.jar;C:itsoftjdkjrelibext
    ashorn.jar;C:itsoftjdkjrelibextsunec.jar;C:itsoftjdkjrelibextsunjce_provider.jar;C:itsoftjdkjrelibextsunmscapi.jar;C:itsoftjdkjrelibextsunpkcs11.jar;C:itsoftjdkjrelibextzipfs.jar;C:itsoftjdkjrelibjavaws.jar;C:itsoftjdkjrelibjce.jar;C:itsoftjdkjrelibjfr.jar;C:itsoftjdkjrelibjfxswt.jar;C:itsoftjdkjrelibjsse.jar;C:itsoftjdkjrelibmanagement-agent.jar;C:itsoftjdkjrelibplugin.jar;C:itsoftjdkjrelib
    esources.jar;C:itsoftjdkjrelib
    t.jar;C:多线程核心技术第一章outproduction第一章;C:itsoftideaIntelliJ IDEA 2016.3.3libidea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.test.Test19
    2 是否停止1=true
    3 是否停止2=false
    4 end
    5 
    6 Process finished with exit code 0

    结果分析:上面结果第一次判断为true,说明当前main线程已经中断,但是第二次调用变成了false.

    官方文档解释:线程的中断状态由该方法清除,所以两次调用的话,第二次会返回false.

    再来测试isInterrupted()

     1 package com.cky.test;
     2 
     3 /**
     4  * Created by edison on 2017/11/28.
     5  */
     6 public class Test19 {
     7     public static void main(String[] args) {
     8         Thread.currentThread().interrupt();
     9         System.out.println("是否停止1="+Thread.currentThread().isInterrupted());
    10         System.out.println("是否停止2="+Thread.currentThread().isInterrupted());
    11         System.out.println("end");
    12 
    13     }
    14 }
    C:itsoftjdkinjava -Didea.launcher.port=7541 "-Didea.launcher.bin.path=C:itsoftideaIntelliJ IDEA 2016.3.3in" -Dfile.encoding=UTF-8 -classpath "C:itsoftjdkjrelibcharsets.jar;C:itsoftjdkjrelibdeploy.jar;C:itsoftjdkjrelibextaccess-bridge-32.jar;C:itsoftjdkjrelibextcldrdata.jar;C:itsoftjdkjrelibextdnsns.jar;C:itsoftjdkjrelibextjaccess.jar;C:itsoftjdkjrelibextjfxrt.jar;C:itsoftjdkjrelibextlocaledata.jar;C:itsoftjdkjrelibext
    ashorn.jar;C:itsoftjdkjrelibextsunec.jar;C:itsoftjdkjrelibextsunjce_provider.jar;C:itsoftjdkjrelibextsunmscapi.jar;C:itsoftjdkjrelibextsunpkcs11.jar;C:itsoftjdkjrelibextzipfs.jar;C:itsoftjdkjrelibjavaws.jar;C:itsoftjdkjrelibjce.jar;C:itsoftjdkjrelibjfr.jar;C:itsoftjdkjrelibjfxswt.jar;C:itsoftjdkjrelibjsse.jar;C:itsoftjdkjrelibmanagement-agent.jar;C:itsoftjdkjrelibplugin.jar;C:itsoftjdkjrelib
    esources.jar;C:itsoftjdkjrelib
    t.jar;C:多线程核心技术第一章outproduction第一章;C:itsoftideaIntelliJ IDEA 2016.3.3libidea_rt.jar" com.intellij.rt.execution.application.AppMain com.cky.test.Test19
    是否停止1=true
    是否停止2=true
    end
    
    Process finished with exit code 0

    结果分析:

    方法isInterrupted()并未清除状态标识,所以打印了两个false.

  • 相关阅读:
    页面滚屏截图工具推荐
    java总结第二次(剩余内容)//类和对象1
    happy birthday to tbdd tomorrow
    数组增删改查及冒泡
    三个循环方面程序
    三个入门小程序
    java总结第二次//数组及面向对象
    Java总结第一次//有些图片未显示,文章包含基础java语言及各种语句
    后台验证url是不是有效的链接
    img 鼠标滑上后图片放大,滑下后图片复原
  • 原文地址:https://www.cnblogs.com/edison20161121/p/7954737.html
Copyright © 2011-2022 走看看