点击蓝色“程序猿DD”关注我

回复“资源”获取独家整理的学习资料!

  1. 单纯的用 synchronized 方法起不到保护作用(不能保护 target)

  2. 用 Account.class 锁方案,锁的粒度又过大,导致涉及到账户的所有操作(取款,转账,修改密码等)都会变成串行操作

如何解决这两个问题呢?咱们先换好衣服穿越回到过去寻找一下钱庄,一起透过现象看本质,dengdeng deng.......

来到钱庄,告诉柜员你要给铁蛋儿转 100 铜钱,这时柜员转身在墙上寻找你和铁蛋儿的账本,此时柜员可能面临三种情况:

  1. 理想状态: 你和铁蛋儿的账本都是空闲状态,一起拿回来,在你的账本上减 100 铜钱,在铁蛋儿账本上加 100 铜钱,柜员转身将账本挂回到墙上,完成你的业务

  2. 尴尬状态: 你的账本在,铁蛋儿的账本被其他柜员拿出去给别人转账,你要等待其他柜员把铁蛋儿的账本归还

  3. 抓狂状态: 你的账本不在,铁蛋儿的账本也不在,你只能等待两个账本都归还

放慢柜员的取账本操作,他一定是先拿到你的账本,然后再去拿铁蛋儿的账本,两个账本都拿到(理想状态)之后才能完成转账,用程序模型来描述一下这个拿取账本的过程:

我们继续用程序代码描述一下上面这个模型:

class Account {   private int balance;    // 转账   void transfer(Account target, int amt){ // 锁定转出账户   synchronized(this) {                // 锁定转入账户   synchronized(target) {              if (this.balance > amt) {    this.balance -= amt;   target.balance += amt;    }   }   }   }
}

这个解决方案看起来很完美,解决了文章开头说的两个问题,但真是这样吗?

我们刚刚说过的理想状态是钱庄只有一个柜员(既单线程)。随着钱庄规模变大,墙上早已挂了非常多个账本,钱庄为了应对繁忙的业务,开通了多个窗口,此时有多个柜员(多线程)处理钱庄业务。

柜员 1 正在办理给铁蛋儿转账的业务,但只拿到了你的账本;柜员 2 正在办理铁蛋儿给你转账的业务,但只拿到了铁蛋儿的账本,此时双方出现了尴尬状态,两位柜员都在等待对方归还账本为当前客户办理转账业务。

现实中柜员会沟通,喊出一嗓子 老铁,铁蛋儿的账本先给我用一下,用完还给你,但程序却没这么智能,synchronized 内置锁非常执着,它会告诉你「死等」的道理,最终出现死锁

Java 有了 synchronized 内置锁,还发明了显示锁 Lock,是不是就为了治一治 synchronized 「死等」的执着呢?

如何避免死锁,我们有什么套路可循?相关推荐

  1. 海有舟可渡、山有路可循‍‍ —— 大学四年圆满落幕

    ⛺️前言 仅以此篇文章记录我的大学四年! 回忆大学四年,有惊喜.有快乐.有崩溃.有欢呼: 有过无数个为了赶策划.赶ddl的熬夜,更有凌晨2点做志愿活动.凌晨5点赶项目的通宵达旦. 梳理下大学四年的大事 ...

  2. 网络游戏服务器架构设计

    有一天,我突然不想做游戏了.于是写点开发总结,于是就有了这篇文档. 入手 假如,我现在接手一个新项目,我的身份还是主程序.在下属人员一一到位之前,在和制作人以及主策划充分沟通后,我需要先独自思考以下问 ...

  3. 如何做一名主程之Unity3D网络游戏服务器架构设计

    下面我们开始今天的Unity3D游戏开发技能. 初期学习目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改素材,可以独立完成2D.3D小规模游戏及网页游戏开发. 今天给大家讲一下如何做一个好 ...

  4. Unity3D游戏开发之网络游戏服务器架构设计培训

    下面我们开始今天的Unity3D游戏开发技能培训. 我们专业培养"游戏主程",挑战20W年薪,初期学习Unity3D培训目标:让U3D初学者可以更快速的掌握U3D技术,自行制作修改 ...

  5. 技改之路:从单块应用到微服务,我的血泪总结--转

    原文地址:http://chuansong.me/n/346948051463 技改是技术改造的简称,是技术的蜕变.本文指的是在公司技术发展的某个瓶颈阶段,按原有开发和组织方式已经无法玩下去,这时公司 ...

  6. [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. 奈飞文化手册_奈飞文化手册学习笔记

    <奈飞文化手册>,这是由流媒体巨头奈飞的前CHO(人才官),奈飞文化平台的创建者帕蒂·麦考德所著,这是一本彻底颠覆了20世纪管人理念的书. 奈飞的企业文化,和我们常见的任何一种企业都不一样 ...

  8. 互联网公司还要亏多久?

    作者 | 黎明 本文经授权转载自燃财经(ID:rancaijing) 在互联网行业,创办一家上市公司可能只需要三年,但创办一家盈利的公司,可能需要五年甚至更长时间. 网易.新浪.搜狐,这批20年前兴起 ...

  9. 计算机视觉专硕:OCR、实习和秋招

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 智能票据录入系统 项目展示 真的是光阴似箭,好像昨天还沉浸在考研成功的喜悦,今天却要即将步入2 ...

最新文章

  1. Waymo无人卡车高调重返凤凰城,但货运先机已失
  2. 在普通Java类里使用spring里注入的service、dao等
  3. 是否有一个不区分大小写的string.Replace的替代方法?
  4. 解决eclipse修改后台代码ctrl+s总是【自动重启服务器】问题
  5. QEventLoop的简单使用(二)
  6. 数据库基础知识——MySQL服务的启动和停止
  7. 从0开始搭建公司后台技术栈,这套架构值得拥有...
  8. 一、K3 WISE 实施顾问教程《进度1-谈谈实施顾问》
  9. 17.XML 命名空间(XML Namespaces)
  10. canvas设置字体粗细用数字没效果_干货 | 用uni-app制作迷你PS小程序
  11. 国内常用的5个中文期刊论文网站,5个外文文献网站
  12. tinder和bumble_发布课程:Tinder,Reddit,Airbnb,Etsy和Uber如何吸引了第一批用户
  13. LAIC2022司法人工智能挑战赛 - 司法文本小样本多任务Baseline
  14. ExpRe[10] Ubuntu[2] 准备神秘软件、备份恢复软件
  15. 阿里聚石塔限制IP 过部署服务器详细流程
  16. 15微型计算机系统不包括,全国2002年10月自学考试计算机应用基础真题
  17. 计算网路地址,广播地址,第一位和最后一位可用地址,可用的IP地址
  18. 俄油与中石油达成为期10年的协议;苏伊士完成股东联合体收购,苏冰岚履职首席执行官 | 能动...
  19. 解决Word中无法使用Mathtype
  20. 核心微生物分析_科学网—微生物组核心OTU鉴定usearch otutab_core - 刘永鑫的博文...

热门文章

  1. linux shell 删除两个文件相同部分
  2. docker-compose up volumes 调用外部文件,权限问题 cannot open directory xxxxx .: Permission denied
  3. python 字符串前面加u,r,b,f的含义
  4. python uvloop异步框架简介
  5. linux查看网卡速率
  6. VC 中字符串比较和查找
  7. Android系统的架构
  8. f2 自适应_典型的三行二列居中高度自适应布局
  9. 算法 - 选择排序(C#)
  10. mysql分区字段创建索引_MySQL分区字段列有必要再单独建索引吗?