Java面试八股之死锁和饥饿的区别

  1. 死锁和饥饿的区别

定义与现象:

死锁(Deadlock)是指两个或多个线程互相等待对方持有的资源而无法继续执行的情况。每个线程至少持有一个资源,并尝试获取另一个由其他线程持有的资源,从而形成一个循环等待的僵局,没有外力干预(如手动中断或系统回收资源),这些线程都将永久阻塞。

饥饿(Starvation)是指一个或多个线程因为资源分配不公平或优先级问题,长期无法获得所需资源而无法执行的现象。尽管资源最终可能被释放,但由于调度策略或其他线程的持续占用,低优先级或不幸的线程可能永远得不到执行机会。

资源等待情况:

死锁中,线程处于相互等待的固定状态,形成闭环依赖,无法推进。

饥饿中,线程可能在等待资源被释放的同时,还可能在等待调度执行,这种等待并非固定不变,但持续时间过长。

涉及的进程数量:

死锁至少涉及到两个进程或线程,每个至少持有一个资源并等待另一个资源。

饥饿可能涉及单个或多个线程,主要与资源分配策略和线程调度相关。

解决策略:

解决死锁通常需要预防(如避免循环等待、使用锁顺序)、检测(运行时检测死锁的存在)和恢复(中断或重启线程)等策略。

针对饥饿,可以通过调整资源分配策略(如公平锁)、优先级调整、老化机制(提升长时间等待线程的优先级)等方法来缓解。

后果与影响:

死锁导致涉及的线程完全停止,无法继续执行任何工作,除非外部干预。

饥饿可能导致某些线程长时间无法执行,影响系统整体性能和响应速度,严重时可能导致“饿死”,即线程永远无法完成其任务。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/675684.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QAnything-1.4.01.4.1版本更新!使用指北!

久等了各位!时隔一个多月,我们在4月26日和5月20日接连发布了v1.4.0和v1.4.1两个版本,带来了问答性能,解析效果等多方面的改进,并新增了大量的新功能和新特性 详见:releases 以及 使用说明 最新特性表 开发…

Android 调试桥_ADB命令

Android 调试桥 ADB全称 【Android Debug Bridge】 是Android SDK中的一个命令行工具,adb命令可以直接操作管理Android模拟器或真实的Android设备(手机) ADB的工作原理 启动一个 adb 客户端时,此客户端首先检查是否有已运行的 …

1961. 检查字符串是否为数组前缀 - 力扣

1. 题目 给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。 字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到&#xf…

kaggle竞赛系列基于图像对水稻分类代码案例

目录 依赖环境 代码 导入依赖包 定义数据集路径: 创建训练集、验证集和测试集的文件夹: 代码的作用: 设置新的数据集路径与类别名称 代码的作用: 定义数据预处理和增强变换: 代码的作用: 定义数…

Appium自动化环境搭建保姆级教程

APP自动化测试运行环境比较复杂,稍微不注意安装就会失败。我见过不少朋友,装了1个星期,Appium 的运行环境还没有搭好的。 搭建环境本身不是一个有难度的工作,但是 Appium 安装过程中确实存在不少隐藏的比较深的坑,如果…

kafka-集群搭建(在docker中搭建)

文章目录 1、kafka集群搭建1.1、下载镜像文件1.2、创建zookeeper容器并运行1.3、创建3个kafka容器并运行1.3.1、9095端口1.3.2、9096端口1.3.3、9097端口 1.4、重启kafka-eagle1.5、查看 efak1.5.1、查看 brokers1.5.2、查看 zookeeper 1、kafka集群搭建 1.1、下载镜像文件 d…

Vuforia AR篇(五)— 地平面检测

目录 前言一、什么是地平面识别?二、使用步骤三、示例代码四、效果五、总结 前言 在增强现实(AR)应用程序的开发中,地平面识别是一项关键技术,它允许虚拟对象与现实世界的地面进行互动。Vuforia 是一个功能强大的 AR …

javacv ffmpeg使用笔记 (补充中...)

javacv ffmpeg使用笔记 一、maven依赖二、示例代码1. 获取视频时长 三、小技巧 一、maven依赖 使用javacv ffmpeg并指定classifier之后,就不需要额外安装ffmpeg软件(jar包中已经内置)了。 全量依赖包(不推荐)安装包总大…

6、架构-服务端缓存

为系统引入缓存之前,第一件事情是确认系统是否真的需要缓 存。从开发角度来说,引入缓存会提 高系统复杂度,因为你要考虑缓存的失效、更新、一致性等问题;从运维角度来说,缓存会掩盖一些缺 陷,让问题在更久的…

HashMap的get和put方法

在 JDK 1.8 中,HashMap 是一个常用的实现了 Map 接口的哈希表,它允许存储键值对,并且键和值都可以为 null。HashMap 的主要特点是其基于哈希表的实现,提供了快速的查找和插入操作。以下是 HashMap 中 get 和 put 方法的介绍及其实…

Flink状态State | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

使用J-LINK COMMANDER检查极海APM32F072烧录

键入 connect: 此时会显示默认设备,如果之前设置过会有,为了演示,我不选 键入 ? 然后会弹出设备选择界面: 根据自己的设备搜索型号: 我这里搜索“APM32F072VB”,点击OK: 选择接口类型: 如果要…

用Python优雅地写LaTeX

latexify用于生成 LaTeX 数学公式的 Python 库。LaTeX 是一种基于 ΤΕΧ 的排版系统,对于展示复杂的数学公式表现极为出色。该项目可以用 Python 函数,轻松生成复杂的 LaTeX 数学公式描述。 安装库 查看版本号 0.4.2 案例演示 我们需要以装饰器的形式…

jquery发ajax自动302、xhrredirect,莫名弹出登录窗口。tomcat部署情况下

效果如下: 原因如下: 跟tomcat自带的一个项目同名了,只要前缀跟那个项目同名 都被拦截。 解决方案: 我直接改了一个接口名字,只要不和tomcat自带项目名字一样即可

Linux基础 (十二):Linux 线程的创建与同步

本篇博客详细介绍与线程有关的内容,这部分也是笔试面试的重点,需要我们对线程有深刻的理解,尤其是线程的并发运行以及线程同步的控制!接下来,让我们走进线程的世界,去理解线程,使用线程&#xf…

RocketMQ学习(3) 秒杀实战

学习完RocketMQ的用法,现在用它来做一个简单的秒杀项目练练手。 关于秒杀,我之前其实有专门的学习过其中的一些业务逻辑和常见问题,我在这篇博客中有写过多并发场景下的秒杀场景,需要考虑哪些问题?也可以学习一下 除了RocketMQ,本文还需要会springBoot + Redis + Mysql…

隐藏 IP 地址的重要性是什么?

在当今的数字时代,保护我们的在线身份至关重要。从保护个人信息到保护隐私,互联网用户越来越多地寻求增强在线安全性的方法。保持匿名和保护敏感数据的一个关键方面是隐藏您的 IP 地址。在这篇博文中,我们将深入探讨隐藏 IP 地址的重要性&…

项目:消息队列的前置知识

文章目录 写在前面环境安装 Protubuf基本介绍 Muduo基本介绍 SQLite3异步操作实现线程池 本篇是对于一个仿RabbitMQ实现的消息队列项目的前置知识的说明文档 写在前面 环境安装 Protubuf 基本介绍 项目所需要的比较重要模块有Protubuf模块,那么下面先对于这个模…

28 _ WebComponent:像搭积木一样构建Web应用

在上一篇文章中我们从技术演变的角度介绍了PWA,这是一套集合了多种技术的理念,让浏览器渐进式适应设备端。今天我们要站在开发者和项目角度来聊聊WebComponent,同样它也是一套技术的组合,能提供给开发者组件化开发的能力。 那什么…

微信支付(可复用)

3.1微信支付 本项目选择小程序支付 参考:产品中心 - 微信支付商户平台微信支付商户平台提供各类支付产品满足商家通过微信支付收款的需求;平台提供智慧经营,现金红包,代金券等运营工具,助力商家更好的玩转营销&#x…