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方法 的相关文章

随机推荐

  • 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