terminated 线程_Java中如何正确地中断一个线程?

2023-11-10

62cc7ec05527c49085106807c35e418a.png

本文主要整理了关于线程中断的相关知识点。

1.线程的状态

●NEW (新建)

一个尚未启动的线程处于这一状态。(A thread that has not yet started is in this state.)

●RUNNABLE (可运行)

一个正在 Java 虚拟机中执行的线程处于这一状态。(A thread executing in the Java virtual machine is in this state.)分享前我推荐下我自己建的Java学习群:479-121-291,欢迎初学和进阶中的Java小伙伴进**流学习。

●BLOCKED (阻塞)

一个正在阻塞等待一个监视器锁的线程处于这一状态。(A thread that is blocked waiting for a monitor lock is in this state.)

●WAITING (等待)

一个正在无限期等待另一个线程执行一个特别的动作的线程处于这一状态。(A thread that is waiting indefinitely for another thread to perform a particular action is in this state.)

●TIMED_WAITING (计时等待)

一个正在限时等待另一个线程执行一个动作的线程处于这一状态。(A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.)

●TERMINATED (终止)

一个已经退出的线程处于这一状态。(A thread that has exited is in this state.)6660a190e66cd4be998e5d989de92f2c.png

2.如何正确中断一个线程?

2.1 利用标志位。

这种简单地设置标志位来中断线程的方法,其弊端是当线程被阻塞时,没办法读到标志位,也中断不了线程。b9ed91a384d1701d641291246b92e15b.png

2.2 调用Thread.interrupt()

interrupt()的本质也是利用了标志位来中断线程,它并不会真正地中断一个线程,而是通过改变标志位,让线程自己根据标志位和时机,灵活地决定要不要退出线程。

关于中断线程,JDK提供了三个与之相关的方法,之前被废弃的方法这里就不多赘述。

2.2.1 public void interrupt()867f59383223edd7e93ab4125814e915.png

所以调用interrupt()的时候分为两种情况:

●线程正常运行的情况(没有阻塞),那么该线程的中断标志位被设置为true,如果没有在线程中读取中断状态,退出线程里的循环的话,线程将继续执行。

●线程被阻塞的情况,由于线程已经被阻塞,要中断线程的话,就需要将线程的中断状态清除,同时抛出InterruptedException异常,线程才得以中断。

2.2.2 public static boolean interrupted()

public static boolean interrupted()

测试当前线程是否已经中断。线程的中断状态由该方法清除。换句话说,如果连续两次调用该方法,则第二次调用将返回 false(在第一次调用已清除了其中断状态之后,且第二次调用检验完中断状态前,当前线程再次中断的情况除外)。

interrupted(),首先会返回当前线程的中断状态,然后会将线程的中断状态清除,也就是将标志位设置为false。

2.2.3 public boolean isInterrupted()

public boolean isInterrupted()

测试线程是否已经中断。线程的中断状态不受该方法的影响。

而isInterrupted(),只会返回线程中断状态,不会修改标志位。

这两者的差别 简单地说就是:

Thread.isInterrupted() 用来读取中断状态, Thread.interrupted() 用来读取中断状态和清除标志位。

tips:在线程执行完毕之后,线程的中断状态会被修改为false。

2.2.4 例子:71f83e70f4e0ed19753251d87316f9bb.png

对于正在学习Java但不知道学习路线,不知道学习方法,不知道该如何找到工作的朋友,在这里我推荐下我自己建的Java学习群:479-121-291,欢迎Java小伙伴进入学习交流。

总的来说,当新开的线程被阻塞了,在调用interrupt()的时候,线程的中断状态清除,同时抛出InterruptedException异常,注意,这个时候中断状态被清除了!你需要在catch语句里面重新调用interrupt(),来维持中断状态,否则,由于中断状态被清除,当程序继续执行到while (!isInterrupted())的时候,线程是不会停下来的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

terminated 线程_Java中如何正确地中断一个线程? 的相关文章

  • 保研之路——中科大信息学院自动化系预推免

    中科大信息学院自动化系预推免 个人情况 高校复试参与情况 中科大信息学院自动化系直硕 9 18 结语 嗯 抱着不白花这么多路费住宿费的初衷准备写一个保研经验贴 希望学弟学妹少花点钱吧orz 我的战术大概是只要学校给我发了邀请我就去 除了时间
  • pid巡线算法程序_技术分享——从单个到多个颜色传感器巡线原理解析

    巡线竞速是常见的机器人比赛项目 它对速度和精准度要求都比较高 该项目大多要求现场进行结构搭建 并且赛前只提供培训参考地图 比赛使用的地图和巡线任务一般是现场才进行公布 对于参赛选手的能力要求较高 巡线任务的基础要求是车体 符合规格 的正投影
  • 关于通用型人工智能语言模型ChatGPT的感悟

    现在目前全世界只有一家真正有实在意义的通用性人工智能 也就是自然语言处理模型 即米国OpenAI旗下的ChatGPT 目前已经更新至GPT 4模型 这个秘密企划是从2017年开始的 一直到2023年才正式公开 在公开的几天内 被众领域学者科
  • docker入门学习笔记

    docker基础操作入门笔记 镜像操作 容器操作 数据卷操作 挂载 为什么要挂载 如何挂载 其他 docker设置开机自启 时间同步问题 jar包的运行 文章中几乎所有的写容器Id的地方 都可以使用容器名称来写命令 镜像操作 列出镜像列表
  • 安卓app后台运行时activity和dialog的一些区别

    Android app后台运行时 startactivity时可以启动其他activity 但是要弹出一个dialog是不被允许的 所以我的方案是把activity当做dialog来使用 这样就能正常弹出了 方法是给activity一个di
  • 【c++之容器】——list的源码模拟实现

    目录 1 list的概述 2 list的节点 3 list的迭代器 4 list的数据结构 a 插入节点 b 删除节点 1 list的概述 list的底层是 双向链表结构 双向链表中每个元素存储在互不相关的独立节点中 在节点中通过指 针指向
  • Docker学习2-docker存储之卷(Volume)

    参考博客 https www cnblogs com sammyliu p 5932996 html 有状态容器都有数据持久化需求 Docker 采用 AFUS 分层文件系统时 文件系统的改动都是发生在最上面的容器层 在容器的生命周期内 它
  • PRML一书中关于贝叶斯曲线拟合结论的推导细节

    PRML一书中关于贝叶斯曲线拟合结论的推导细节 我们令训练数据集为 X T X T X T 对于一个新的点 x
  • GitBook使用教程

    各大站长平时除了写博客外 可以使用 gitbook 将一系列的博客专栏整理成电子书出版 这样既方便各大网友阅读 还可以带来新的离线阅读功能 在以前我们只能靠出版社 或者编写 word 文档 来实现 然而有了 gitbook 之后 一切都变得
  • Python 炫技操作:条件语句的六种写法(Python就是这么炫酷)

    有的人说 Python 入门容易 但是精通难的语言 这点我非常赞同 Python 语言里有许多 而且是越来越多 的高级特性 是 Python 发烧友们非常喜欢的 在这些人的眼里 能够写出那些一般开发者看不懂的高级特性 就是高手 就是大神 但
  • 1.两数之和

    两数之和 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 target 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可
  • 网络—安全—防火墙

    网络 安全 防火墙 是什么 表面概念 防火墙 一种高级访问控制设备 置于不同网络安全域之间 它通过相关的安全策略来控制 允许 拒绝 监视 记录 进出网络的访问行为 是什么 设备结构和运行原理 设备结构 Netfilter是由Rusty Ru
  • [Vue3 博物馆管理系统] 使用Vue3、Element-plus的Layout 布局构建组图文章

    系列文章目录 第一章 定制上中下 顶部菜单 底部区域 中间主区域显示 三层结构首页 第二章 使用Vue3 Element plus菜单组件构建菜单 第三章 使用Vue3 Element plus走马灯组件构建轮播图 第四章 使用Vue3 E
  • 使用python程序进行手势识别

    python代码 从视频读取帧保存为图片 import cv2 import numpy as np cap cv2 VideoCapture C Users lenovo Videos 1 mp4 读取文件 cap cv2 VideoCa
  • QGraphicsScene管理QGraphicsItem(单击/选择/移动/缩放/删除)

    文章目录 前言 简述 操作细节 示例 效果 源码 疑问自解自答 那么正方形旋转参照的是哪个点那 前言 本文参考博文https blog csdn net liang19890820 article details 53504323 简述 在
  • 初级运维(九)

    1 静态资源和动态资源的区别 优缺点如何 答 静态资源 URL固定 后缀名诸如 html和 jpg和 gif 它是服务端存在的一种文件 浏览器进行解析 不与数据库交互 有利于网站推广 SEO 维护麻烦 动态资源 有数据库支持 内容丰富 后缀
  • Linux操作系统 第八章

    实验1 磁盘引导 开启虚拟机 mbr 主引导记录 0磁道1扇区446 作用 记录grub2引导文件的位置 dd if dev zero of dev vda bs 446 count 1 清空系统 dev sda上的mbr数据 fdisk
  • android app 跳转到微信

    公司做了个微信投票活动 必须下载安装我们的app才能参加 所以当新客户投票时就会下载安装我们的 然后在注册完成后客户信息同步到微信接口上 然后就有一个回到微信的跳转 主要代码如下 try catch 捕捉到ActivityNotFoundE
  • 【论文笔记04】Model-driven approach for the design of multi-chainsmart contracts—用于设计多链智能合约的模型驱动方法

    A Bari i E Zhu and F Mallet Model driven approach for the design of Multi Chain Smart Contracts 2021 3rd Conference on B

随机推荐

  • g++十个最常用参数

    g 重要参数 1 g 产生调试信息 可以调试程序 2 O n 优化源代码 O0 不作优化 O1 默认 O2 指令调整 O3 循环展开 处理特性优化 编译速度会变慢 3 l指定库文件 L指定库文件路径 要链接哪些库 库直接紧接着比如 lglo
  • 36 openEuler搭建repo服务器-部署远端repo源

    文章目录 36 openEuler搭建repo服务器 部署远端repo源 36 1 nginx安装与配置 36 2 启动nginx服务 36 3 repo源部署 36 openEuler搭建repo服务器 部署远端repo源 安装openE
  • uniapp的分页方法skip方法调用报错 “offsetmust be integer“

    开发中使用官方分页查询列表数据报错 官方写法 一直报错 后面通过官网的文档找到skip方法介绍才知道问题 skip的参数必须是一个正整数 发现改成整数后可以调用成功 希望能给大家一点帮助 发现uniapp的云开发使用调试还是很麻烦 经常调用
  • 使用QT进行WIFI无线传输数据

    好久没有更新博客了 今天简单写下关于WiFi无线通信进行数据传输的相关内容 基于TCP IP协议的通信 代码在文章末尾 具体实现如下 1 首先win R 进入命令行 输入ipconfig查看WiFi网卡的IP地址 2 使用WiFi网址对网关
  • Python 字典 keys() 方法

    描述 Python 字典 keys 方法以列表形式 并非直接的列表 若要返回列表值还需调用list函数 返回字典中的所有的键 语法 keys 方法语法 D keys 参数 无 返回值 以列表形式返回字典中的所有的键 实例 以下实例展示了 k
  • hadoop3.1.1:启动hadoop进程提示ssh 22端口不能连接

    分析 由于在生产环境下 ssh的端口被修改成220 不是使用的默认端口 但是hadoop在启动相应进程的时候 使用的ssh默认端口 解决 1 命令行 临时 这种方式会导致关闭当前终端 该值失效 export HADOOP SSH OPTS
  • java ddd开发_Java开发架构篇《初识领域驱动设计DDD落地》

    作者 小傅哥 博客 https bugstack cn gt 沉淀 分享 成长 让自己和他人都能有所收获 一 前言 gt DDD Domain Driven Design 领域驱动设计 是由Eric Evans最先提出 目的是对软件所涉及到
  • 使用Vue的transition组件写一个数字滚动竟然如此简单

    使用vue的transition组件 来实现一个数字滚动效果 其实不仅可以是数字滚动 还可以是文字 段落滚动 代码片段使用了定位做的 还可以使用transform 只是一种思路 不限制方案 布局 没有别人写的东西炫酷 我都不知道怎么写内容了
  • PCA、SVD、谱聚类

    PCA SVD 谱聚类 1 PCA 2 SVD 3 LDA 4 谱聚类 4 1 无向权重图 4 2 相似矩阵 4 3 拉普拉斯矩阵 4 4 无向图切图 附录1 秩 和 特征值 附录2 协方差 附录3 卡方检验 1 PCA 所谓降维 就是要把
  • testt

    test
  • visio2016企业批量授权版本的激活方式

    首先先下载visio2016的企业批量授权版本 下载地址 用window的资源管理器打开压缩包 点击setup exe 之后默认安装 接下来就是激活的过程 win r快捷键 输入cmd cd C Program Files Microsof
  • anaconda 安装 for macOSX

    步骤 1 登陆官网 https www anaconda com 2 点击 get started 开始 3 选择下载 下载 4 根据自己的电脑来选择下载的方式 我用的是mac所以就选择这个 这里有两种选择 其实都可以 选择一个就行 4 1
  • osgEarth的Rex引擎原理分析(二十一)创建瓦片模型过程详解

    目标 十七 中问题47 瓦片模型的作用是负责管理瓦片中的影像 高程等图层信息 这些信息的获取最终通过createTileModel函数来实现 负责维护瓦片版本等 应当是每一个瓦片都对应有一个瓦片模型 这个瓦片模型是在瓦片请求过程中创建的 具
  • 面试最常被问的 Java 后端题目及参考答案

    一 Java 基础篇 1 Object 有哪些常用方法 大致说一下每个方法的含义 2 Java 创建对象有几种方式 3 获取一个类对象的方式有哪些 4 ArrayList 和 LinkedList 的区别有哪些 5 用过 ArrayList
  • next.js中引入sass

    第一步 安装sass npm install save zeit next sass node sass 第二步 在项目根目录添加 next config js 文件 用于指示Next加载对用的功能 const withSass requi
  • 基础软件与开发语言开源论坛

    ChinaOSC 2022基础软件与开发语言开源技术论坛将于8月20日 14 00 18 00在陕西省西安高新国际会议中心召开 论坛邀请到在操作系统 中间件等基础软件领域 以及编程语言领域深耕多年的开源专家 深度分享开源软件研发的创新之路
  • 【Pandas总结】第九节 Pandas_累计与分组 pd.groupby()

    文章目录 一 数据准备 二 累计值计算 2 1 df describe 2 2 常用统计值 三 分组 pd groupby 四 更多的使用方法 aggregate filter transform apply 4 1 aggregate 4
  • [Kafka] - Kafka Java Producer代码实现

    根据业务需要可以使用Kafka提供的Java Producer API进行产生数据 并将产生的数据发送到Kafka对应Topic的对应分区中 入口类为 Producer Kafka的Producer API主要提供下列三个方法 public
  • webview拦截垃圾电信运营商的广告方法

    mWebView setWebViewClient new WebViewClient Override public boolean shouldOverrideUrlLoading WebView view String url if
  • terminated 线程_Java中如何正确地中断一个线程?

    本文主要整理了关于线程中断的相关知识点 1 线程的状态 NEW 新建 一个尚未启动的线程处于这一状态 A thread that has not yet started is in this state RUNNABLE 可运行 一个正在