Java中的死锁

1.什么是死锁

死锁:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期的阻塞,线程不可能正常终止。

举个栗子】滑稽老铁和女生去吃饺子。吃饺子需要醋和饺子。

滑稽老哥抄起了酱油瓶,女生抄起了醋瓶。

滑稽老铁:你先把醋瓶给我,我才把酱油瓶给你。

女生:你先把酱油瓶给我,我才能给你醋瓶。

如果两者彼此互不相让,就会导致死锁。

酱油和锁相当于两把锁,这两个人相当于两个线程。

【伪代码】

//线程1
synchronized(lock1) {
    sychronized(lock2) {
        //do something
    }
}

//线程2
synchronized(lock2) {
    sychronized(lock1) {
        //do something
    }
}

如果线程1拿到lock1后,线程2开始执行,拿到lock2,此时又开始执行线程1,但是线程1阻塞。线程2也会出现阻塞。

为了进一步阐述死锁的形成,我们引入“哲学家就餐问题”

  • 有个桌子,圈着一圈哲学家,桌子上放着足够的意大利面。每个哲学两两之间,放着一根筷子。

  •  每个哲学家只做两件事:思考人生 或者吃面条。思考人生的时候就会放下筷子。吃面条就会拿起左右两边的筷子
  • 如果哲学家发现筷子被占用,就会阻塞。
  • 假设每个哲学家,如果都同时拿起左手边的筷子,然后尝试拿起右手边的筷子,将会发现右手边的筷子都被占用了。但是由于哲学家互不相让,这是就会造成死锁的状态

2.如果避免死锁

死锁产生的四个必要条件:

  • 互斥使用,当一个锁被占用的时候,其他线程无法使用。
  • 不可抢占,资源请求者不能强制从资源占有者夺取资源,资源只能由资源占有者主动释放。
  • 请求和保持,即当资源请求者在请求其他支援的时候同时保持对原有资源的占有。
  • 循环等待,多个线程相互等待,造成死锁情况。

上述四个条件都成立的情况下,才能形成死锁的情况。当然,死锁的情况下如果打破上述任何一个条件,便可破解死锁。

2.1破坏循环等待

常用的一种死锁阻止技术就是锁排序

仍然是上面的哲学家问题:我们给每根筷子编一个序号,只有在获得大序号的筷子的情况下,才能获取小序号的筷子。

 

此时左上角的哲学家就会失去筷子,其他的哲学家就会获得两个筷子,使用完,并放下筷子。死锁情况也迎刃而解。

【伪代码】

//线程1和线程2约定好,先获取lock1,才能获取lock2

//线程1
synchronized(lock1){
    synchronized(lock2){
        //do something
    }
}

//线程2
synchronized(lock1){
    synchronized(lock2){
    //do something
    {
}

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

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

相关文章

【技术教程】在EasyCVR平台中打开第三方桌面端应用的实现过程

EasyCVR视频融合平台基于云边端协同架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议接入,包括市场主流标准协议与厂家私有协议及SDK,如:国标GB28181、RTMP、RTSP/Onvif、海…

vue 引入高德地图当前定位失败 Get ipLocation failed.Geolocation permission denied.

getCurrentPosition 返回的 message 原因解析 : Get ipLocation failed:IP 精确定位失败,精确IP定位服务目前无法完全覆盖所有用户 IP,失败率在5%左右。sdk 定位失败:检查 sdk的 key 是否设置好,以及 webv…

如何远程连接SQLServer数据库

如何远程连接SQLServer数据库 准备工作 1.打开 选中如下的连接方式 连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性: 设置完成之后点击完成!!! 3.打开 启动sqlSe…

华为OD机试用JS实现 -【查找树中的元素 or 查找二叉树节点】(2023-Q2 押题)

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:查找树中的元素 or 查找二叉树…

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲

2023年南京晓庄学院五年一贯制专转本食品科学与工程专业考试大纲 专业科目一 :微生物学基础 【参考书目】《食品微生物学》,杨玉红主编, 中国质检 出版社/中国标准出版社,2017(十三五高职高专院校规划教材) 【考试大纲】 ( 一) 考…

jsp054ssm高校学生成绩管理系统hsg421010A5程序

系统主要包含了学生信息管理、成绩信息管理等多个功能模块。下面分别简单阐述一下这几个功能模块需求。不同的权限对应相应的功能模块的需求,管理员权限的级别是最高的,所以所对应的需求是最多的,下面根据不同的权限分别简单阐述一下各个权限…

神奇智能搜索引擎:perplexity智能搜索引擎(ChatGPT与Edge合体——联网版chatGPT)

目录前言一、Perplexity AI网站介绍二、优点介绍2-0、界面介绍2-1、纯净、时效性、来源说明2-2、基于AI对话形式的搜索引擎三、使用方法介绍总结前言 ChatGPT背后的语言大模型OpenAI GPT 3.5,和微软的必应检索系统整合在一起;同时吸取这二者的长处&#…

Python爬虫|西安地铁客流人次获取与分析(一)

一、目标 通过Python编写爬虫程序,爬取西安地铁发布的客流数据,并保存到CSV文件中,并进行数据可视化与分析。 本次使用的库包括:requests、BeautifulSoup、xpath、csv、json、Pycharts等。 二、爬取思路分析 1、WB网页版 打开XLWB主页网址。 图1.新浪微博手机端网址 …

智慧水利整体解决方案2022(ppt可编辑)

业务场景与痛点分析 聚焦场景: 水工监控、水利监管、城市治水、基层防汛业务场景。 痛点分析: 水工监控中,全国水库共有9.8万座,其中超过50%处于病险状态; 水利监管中,运行管理薄弱、设备老化、预报预警不…

弱监督语义分割的token对比笔记

Token Contrast for Weakly-Supervised Semantic Segmentation 摘要 目的: 使用图像级标签的弱监督语义分割(WSSS)通常利用类激活映射(CAM)生成伪标签。受CNN局部结构感知的限制,CAM通常不能识别整体目标区域。虽然最近的视觉转换器(ViT)可以弥补这一…

汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 一、99乘法表 汇编代码 INCLUDE Irvine32.inc .data a db *,0 .code main PROC mov ebx,1;ebxi m…

给对象新增两个数组,并分别给对象名称、名字

给对象新增两个数组,并分别给对象名称 代码如下: let a {}a.shuzu [1, 2, 3]a.zhangzu [5, 6, 7]console.log(测试添加, a)console.log(打印后台传递的值, this.res)

ToBeWritten之物联网MQTT、Z-Wave等协议

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

gpt训练数据-网页版chat软件

gpt-3 中文 api 目前,OpenAI官方并没有针对GPT-3的中文API,但是有一些第三方机构或者开发者提供了自己的中文API接口,可以使用GPT-3模型进行中文文本生成,利用这些API可以简单地进行中文文本生成等任务,尤其是对于不擅…

详解电容加速电路-加速电容

基本的晶体管开关电路 饱和开关的问题点:关断延时时间 如图1所示,使场效应晶体管开关动作时,加给晶体管的基极电流IB: IBIC/hFE。 晶体管饱和动作时,如图2所示,基极电流IB,即使为0&#xff…

【基础】索引

索引目的: 快速的查找我们的数据 索引的优势和劣势 优势 类似于书籍的目录索引,提高数据检索的效率,降低数据库的io成本 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗 劣势 实际上索引也是一张表&…

【艾特淘】电商干货-淘宝新卖家运营的8个步骤

1、选品 选品是运营的第一步,后续的运营工作都是以商品为载体,以挖掘市场潜力商品,帮助提升宝贝效果,优化库存状况,监控热销单品,跟踪竞争对手,打造爆款为运营主要目标。 1、行业热销品类、品牌…

⭐蓝桥杯高频题单——1.子串分值和(枚举 / 计算贡献 / 前缀数组 / 哈希思想)

⭐子串分值和⭐ 方法一: 暴力 在做这道题的时候我想到了以前力扣做的一道Leetcode.78. 子集__DFS算法剖析讲解。初始我的想法是通过深搜找到所有可能的子串,再对他们分别计算f(S),从而得到所有的f(S)之和。但是经过思考发现,这里…

ChatGPT让现在的软件都土掉渣了

我们家有两个娃,每次我们想要出去时订个酒店时都好麻烦。我在某程上找,我先看有没有家庭房,但家庭房很少,而且有些家庭房实际上只能睡得下两大一小。普通房间能不能睡得下四个人,那可是得查看很多信息,如床…

SpringBoot——SB整合mybatis案例(残缺版本)第四集(真*大结局)

基础登录功能 要求输入用户名和密码然后从对应的数据库员工表当中查询是否存在对应员工: 查询成功 查看接口文档 响应数据中有一个JWT令牌。 实现思路 新建一个LoginController用于接收登录请求,然后调用EmpService中的借口进行查询操作。 三层架构的代码 Pos…