Java多线程——为什么弃用stop、suspend、resume方法

2023-11-11

初始的Java版本定义了一个stop方法用来终止一个线程,以及一个suspend方法用来阻塞一个线程直至另一个线程调用resume。stop和suspend方法有一些共同点:都试图控制一个给定线程的行为。

stop、suspend和resume方法已经弃用。

stop方法天生就不安全,经验证明suspend方法会经常导致死锁。

首先来看看stop方法,该方法终止所有未结束的方法,包括run方法。当线程被终止,立即释放被它锁住的所有对象的锁。这会导致对象处于不一致的状态。假如,假定TransferThread在从一个账户向另一个账户转账的过程中被终止,钱款已经转出,却没有转入目标账户,现在银行对象就被破坏了。因为锁已经被释放,这种破坏会被其他未停止的线程观察到。
当线程要终止另一个线程时,无法知道什么时候调用stop方法是安全的,什么时候导致对象被破坏。因此,该方法被弃用了。在希望停止线程的时候应该中断线程,被中断的线程会在安全的时候停止。

接下来看看suspend方法有什么问题。与stop不同,suspend不会破坏对象。但是,如果线程t1调用suspend阻塞一个持有一个锁的线程t2,那么,该锁在线程t2恢复之前是不可用的。如果t1试图获得同一个锁,那么t1也阻塞,程序死锁:被挂起的线程t2等着被恢复,而将其挂起的线程t1等待获得锁。

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

Java多线程——为什么弃用stop、suspend、resume方法 的相关文章

  • 增加字符串的最后一个字母

    这是我希望 Java 的 String 类有一个 ReplaceLast 方法的地方 但它没有 而且我的代码得到了错误的结果 我正在编写一个程序 该程序在数据结构中搜索与字符串前缀匹配的任何项目 但是 由于我使用的是迭代器 iter nex
  • Spring部署期间依赖注入问题

    我正在启动一个 Primefaces Spring Hibernate 项目 并且仍在学习如何正确处理这些组件 但就在此时 我面临着一个与 spring 依赖注入相关的问题 这让我很害怕 我已经在网上寻找答案两天了 但找不到我的代码有什么问
  • 部署程序集:当前显示的页面包含无效值

    我从 Sourceforge 导入了一个 Java Web 应用程序 我花了三个工作周的时间来消除项目名称和包上附加的所有红叉 但现在我无法使该应用程序在我的 Eclipse 和 tomcat6 开发环境上运行 在项目属性中 当我尝试设置部
  • 在 IntelliJ 插件中创建后台任务

    我正在开发一个 IntelliJ idea 插件 并希望在后台任务中运行代码 在后台任务对话框和 UI 之外的另一个线程中可见 我发现了以下内容助手类 https github com inmite android selector cha
  • 包java.time不存在,jdk1.8

    嗯 我刚刚开始从事代号工作 我对 Java 有相当不错的经验 我的代码一切都很好 没有任何问题 但在编译时我得到了这个 error package java time does not exit import java time Local
  • 如何在同一个项目中连接两个数据库MySQL和MongoDB?是否可以?

    目前我正在使用 Hibernate MySQL 和 Spring 配置对我来说运行良好 但是一旦我配置了另一个配置 mongo config xml 文件并尝试使用 mongodb 运行测试用例 它就显示创建名为 的 bean 时出错从第一
  • 当我在选择 0 索引的情况下删除和添加时,Swing JList 冻结

    这是一个示例 您按下一个按钮 jList1 会重新填充从 a1 到 a1000 的项目 variable private List
  • Spring框架中的DAO和Service层到底是什么?

    Spring框架中的DAO和Service层到底是什么 我正在寻找理论答案 就 Spring 而言 没有区别 按照惯例 您可以使用以下方式标记 DAO 类 Repository和服务 Service 前者还进行一些持久层异常转换 既然您在理
  • 没有 if 条件(动态查询)或乱码的Where子句中的PreparedStatement“为null”

    假设我有这样的查询 SELECT FROM CUSTOMERS WHERE CUSTOMER ID 使用PreparedStatement 我可以绑定变量 pstmt setString 1 custID 但是 我无法通过以下绑定获得正确的
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv
  • 如何从属性中获取枚举值

    我有一个带有值的枚举VALID and INVALID 它们有一个与之关联的布尔属性 我想根据我提供的布尔值获取枚举值 如果是true我应该得到VALID 如果是false我应该得到INVALID 我想根据成员变量的值 在如下所示的 get
  • Spring MVC - 从 JSP 提交对象

    我有一个显示客户列表的 JSP ArrayList searchResults 我希望能够选择其中之一 并将其 提交给 Spring MVC 控制器 但是 我似乎无法传递所选对象 只能传递它的属性 例如 customerId 我真的需要传递
  • 将 LinkedHashset 内容复制到新的 ArrayList?

    我有一个最初包含一些内容的 listView 如果它得到相同的内容 我通过删除重复linkedhashset 现在 我想复制linkedhashset内容 即没有重复的内容到新的ArrayList 我尝试复制通过 p addAll 0 lh
  • 有人使用 Hibernate 使用 Elasticache 作为二级缓存吗?

    我发现一些线程说这是可行的 但没有找到具体的说明或配置信息 我也想从 Beanstalk 执行此操作 应用程序应该部署到 beanstalk 并使用将 hibernate 指向 elasticache 实例的配置 是的 我们能够使用二级缓存
  • 从 MySql 迁移:MariaDB 服务器意外关闭客户端连接

    由于许可 商业使用原因 我们正在从 MySql 迁移到 MariaDB 我们已经成功用 MariaDB 客户端 jar 替换了 MySql 连接器 jar 第一次更改 现在正在尝试用 MariaDB 服务器替换 MySql 服务器而不更改数
  • 强制预先加载原本延迟加载的属性

    我有一个 Hibernate 对象 它的属性都是惰性加载的 大多数这些属性是其他 Hibernate 对象或 PersistentSet 现在我想强制 Hibernate 一次性加载这些属性 当然 我可以 触摸 这些属性中的每一个objec
  • “该选择不能在任何服务器上运行”

    我一直在 Eclipse 中开发一个动态 Web 项目 我收到这个错误 该选择不能在任何服务器上运行 早些时候它工作得很好 但现在我收到了这个错误 我删除了服务器并再次添加 Project gt Right Click gt Propert
  • 使用 Java 8 时间将时间从一个时区转换为另一时区

    我正在尝试将日期转换为GMT 5 30 to EST与java 8ZonedDateTime String inputDate 2015 04 30 13 00 DateTimeFormatter sourceFormatter DateT
  • 如何使用 GWT 2.4 在服务器端动态创建 UI

    我正在尝试使用 Google Web Toolkit v2 4 创建用户界面 由于多种原因 我需要在运行时指定服务器上接口的内容 我的意思不仅仅是按钮需要动态标签等 而是整个 UI 需要在运行时创建 我的大部分 UI 都可以指定为直接的 H
  • Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

    正如这个问题中所描述的 OpenJDK 与 Java HotspotVM https stackoverflow com q 44335605 1593077 Oracle 的商业 Hotspot JVM 本质上是 OpenJDK 加上一些

随机推荐

  • k8s部署prometheus + grafana

    k8s以Deployment方式部署prometheus grafana 主机说明 系统 ip 角色 cpu 内存 hostname CentOS 7 8 192 168 30 128 master gt 2 gt 2G master1 C
  • 线性回归(Linear Regression)

    引言 说到底 回归任务都是寻找特征与目标之间的关系 我们认为每一个特征或多或少 或积极或消极地对目标产生着影响 我们期望寻找数学表达式来表达出这种影响 一 回归模型 想象一下描述特征与目标之间最简单明了的关系是什么 当然是线性关系了 每个特
  • 解决RuntimeError: CUDA error: device-side assert triggeredCUDA kernel errors...CUDA_LAUNCH_BLOCKING=1

    完整报错 RuntimeError CUDA error device side assert triggeredCUDA kernel errors might be asynchronously reported at some oth
  • opencv 中Canny边缘检测算法原理加每一个(分)步骤的代码演示

    1 原理 1 噪声抑制 输入图像经过高斯平滑滤波 减少噪声的影响 2 计算梯度 在平滑后的图像上应用Sobel算子计算梯度幅值和方向 3 非极大值抑制 在梯度方向上 比较每个像素的梯度幅值与其相邻两个像素沿着梯度方向的梯度幅值 如果当前像素
  • 本科毕设研究记录(一)————小样本综述

    本科毕设记录 一 小样本综述 综述 问题定义 相关的领域 核心问题 经验风险最小化 Empirical Risk Minimization 不可靠的经验风险最小化 Unreliable Empirical Risk Minimizer 解决
  • 华为主题包hwt下载_hwt主题文件下载猫和老鼠

    hwt主题文件下载猫和老鼠app是一款针对华为手机精心设定的一款主题软件 软件主题是以经典的猫和老鼠动态图为主 各种不同风格的搞笑图片可以任意下载使用 当它们出现在你的手机屏保上时 让你聊天时更开心 设置方法比较简单 会有相关的教程 hwt
  • 动画的应用,西游记动画效果

    实现背景向后移动以及人物走路的动画效果 实现代码如下
  • AngularJS(13)-包含

    AngularJS 包含 使用 AngularJS 你可以使用 ng include 指令来包含 HTML 内容 实例
  • WIN10下搭建gcc编译环境

    安装make 1 下载make 3 81 链接 https pan baidu com s 1kj2CzmLvl tDTuHJRXKnBg 提取码 v7fh 2 直接安装 全选next 安装路径最好不要改动 3 进入系统属性 选择环境变量
  • 合天Weekly第二十一周

    分析代码可以看出是sql注入 首先使用order by 看下有几列 这里空格被过滤使用 绕过 当输入4的时候不回显所以为3列 提示flag在 falg 表里构造payload 1 union select 1 flag 3 from fla
  • mybatis.type-aliases-package的作用和用法

    第一种在mapper xml文件中的resultMap的type或者parameterType会用到自定义的POJO 其中resultType User 中 User就是自定义的POJO 此时可以使用完全限定名来指定这些POJO的引用 第二
  • lambda 和 Predicate 的妙用示例

    1 过滤集合数据的多种常用方法 public class DemoTest1 public static void main String args List
  • 数据挖掘和机器学习之间,主要有什么区别和联系?

    数据挖掘和机器学习的区别和联系 周志华有一篇很好的论述 机器学习和数据挖掘 可以帮助大家理解 数据挖掘受到很多学科领域的影响 其中数据库 机器学习 统计学无疑影响最大 简言之 对数据挖掘而言 数据库提供数据管理技术 机器学习和统计学提供数据
  • 手势识别Python-OpenCV

    目录 一 选题背景 5 二 设计理念 5 2 1 搭建平台 5 2 2 问题描述 5 2 3 过程概述 6 三 过程论述 6 3 1 数据集生成 6 3 1 1 标准化图片的采集 6 3 1 2肤色检测 7 3 1 3 特征提取 8 3 1
  • Linux系统基础命令

    Linux系统常用基本命令 ls 查看当前目录下所有文件 注 蓝色 文件夹 白色 普通文件 绿色 拥有执行权限的文件 红色 压缩文件 touch 示例 touch filename txt 在当前目录下创建一个文件 注 文件名区分大小写 文
  • 【LeetCode】83. 删除排序链表中的重复元素

    83 删除排序链表中的重复元素 简单 方法 一次遍历 思路 由于给定的链表是排好序的 因此重复的元素在链表中出现的位置是连续的 因此我们只需要对链表进行一次遍历 就可以删除重复的元素 从指针 cur 指向链表的头节点 随后开始对链表进行遍历
  • 【时间序列数据挖掘】ARIMA模型

    目录 0 前言 一 移动平均模型MA 二 自回归模型AR 三 自回归移动平均模型ARMA 四 自回归移动平均模型ARIMA 总结 0 前言 传统时间序列分析模型 ARIMA模型是一个非常灵活的模型 对于时间序列的好多特征都能够进行描述 比如
  • MYSQL数据库测评及整改

    1 查询数据库版本 select version 2 查询已安装的插件 show plugins 3 查询插件安装的位置 show variables like plugin dir 4 查询用户 选择数据库 select host use
  • 阿里云OCR图片识别

    阿里云OCR图片识别 请求参数 Body 请求示例 java 正常返回示例 错误码定义 阿里云OCR图片识别 单字识别 表格识别 旋转功能 准备条件 阿里云OCR图片识别API购买 初次购买1分钱500次接口调用 请求参数 Body 图像数
  • Java多线程——为什么弃用stop、suspend、resume方法

    初始的Java版本定义了一个stop方法用来终止一个线程 以及一个suspend方法用来阻塞一个线程直至另一个线程调用resume stop和suspend方法有一些共同点 都试图控制一个给定线程的行为 stop suspend和resum