zoukankan      html  css  js  c++  java
  • 线程中断

    中断api

    //返回线程状态位状态
    public boolean isInterrupted()
    
    //设置线程中断状态位为true
    public void interrupt()
    
    //返回线程中断状态,并清除中断状态
    public static boolean interrupted()

    不同状态的中断效果

    1、NEW和TERMINATED

    NEW:还未启动,start
    TERMINATED:线程运行结束
    效果:并不会设置线程的中断标识位,什么事也不会发生。

    2、RUNNABLE

    运行状态,不一定所有处于RUNNABLE状态的线程都能获得CPU运行,没有获得cpu时间片的没有真正在运行
    效果:只是设置中断状态位,不会让线程实际中断,需要程序自己去判断(增加程序灵活性)。

    public void run(){
        while(true){
            //判断线程是否被中断了
            if (Thread.currentThread().isInterrupted()){
                System.out.println("exit MyThread");
                break;
            }
        }
    }

    3、BLOCKED

    该状态说明该线程由于竞争某个锁失败被挂在了阻塞队列上
    效果:只是设置中断状态位,不会让线程实际中断

    4、WAITING和TIMED_WAITING

    WAITING:无期限等待知道notify
    TIMED_WAITING:等待指定时间
    线程运行中由于缺少某个条件而被挂起在某个对象的条件队列上
    效果:会抛出一个InterruptedException异常,并清空中断标志位

    总结

    NEW和TERMINATED对于中断操作几乎是屏蔽的
    RUNNABLE和BLOCKED类似,对于中断操作只是设置中断标志位并没有强制终止线程,对于线程的终止权利依然在程序手中。
    WAITING/TIMED_WAITING状态下的线程对于中断操作是敏感的,他们会抛出异常并清空中断标志位。

    参考:https://www.cnblogs.com/yangming1996/p/7612653.html

  • 相关阅读:
    makefile基本操作
    Visual Studio Code 的 launch.json 解析
    Manjaro 安装与配置
    Manjaro 系统添加国内源和安装搜狗输入法
    ununtu 18.04 163 mirror
    How to Use GNOME Shell Extensions
    Ubuntu: repository/PPA 源
    什么是线程阻塞?为什么会出现线程阻塞?
    Java锁的种类
    java8流式编程(一)
  • 原文地址:https://www.cnblogs.com/siqi/p/11369061.html
Copyright © 2011-2022 走看看