zoukankan      html  css  js  c++  java
  • 线程的停止和中断

    以下代码示例:t线程启动后不间断的对x,y自增。main线程睡眠3秒,然后t线程调用自己的stop(),停止线程isAlive()查看线程是否存活,如果线程死亡则while循环结束,打印x,y的值。打印的负数值不是重点,重点是,x,y的值不一样,这表示,stop方法会强制中断线程,这使得我们的程序不安全。

     

    将stop()替换成interrupt()这个方法不会停止线程,只是修改线程自身的中断信号量为true,让用户自己根据信号量去判断线程是否要执行结束。在run()方法中,while的条件改为isInterrupted(),如果线程的中断信号量为true,则停止循环,但是循环内部的代码会执行结束。最后t线程结束后,x,y的值相同。

    需要注意的是,在一些特殊情况下,interrupt()是不生效的,不会更改线程本身的中断信号量。

    从结果看线程t线程的while循环并没有终止,但是捕获了一个InterruptedException

    interrupted同样判断线程是否中断,如果中断返回true,没有中断返回false。但是无论线程是否是中断状态,它都会将线程的中断状态清除。

     

     

  • 相关阅读:
    使windows server 2003 开机不显示登录页面
    G
    D
    三分求函数极值详解
    H
    G
    E
    D
    A
    B
  • 原文地址:https://www.cnblogs.com/zumengjie/p/13821859.html
Copyright © 2011-2022 走看看