我靠!Semaphore里面居然有这么一个大坑! (4)

简介: 我靠!Semaphore里面居然有这么一个大坑! (4)

在往前看日志发现,原来是刘能、谢广坤走后,显示了剩余停车位 3 辆。


问题就出在这个地方。


而这个地方对应的代码是这样的:


image.png


有没有一点恍然大悟的感觉。


50 行抛出了 InterruptedException,导致明明没有获取到许可证的线程,执行了 release 方法,而该方法导致许可证增加。


在我们的例子里面就是刘能、谢广坤的车都还没停进去,走的时候门口的显示屏就增加了两个停车位。


这就是坑,就是你代码中的 BUG 潜伏地带。


那么怎么修复呢?


答案已经呼之欲出了,这个地方需要 catch 起来,如果出现中断异常,直接返回:


image.png


image.png


抛出 InterruptedException 后,分配给这个线程的所有许可证都会被分配给其他想要获取许可证的线程,就像通过调用 release 方法一样。


增强release


你分析上面的问题会发现,导致问题的原因是没有获取到许可证的线程,调用了 release 方法。


我觉得这个设定,就是非常容易踩坑的地方。简直就是一个大坑!


我们可以就这个问题,对 release 方法进行增强,只有获取后的线程,才能调用 release 方法。


这一招我是在《Java高并发编程详解-深入理解并发核心库》里面学到的:


image.png


image.png


image.png



这本书写的还是不错的,推荐给大家。


最后说一句(求关注)


才疏学浅,难免会有纰漏,如果你发现了错误的地方,还请你留言指出来,我对其加以修改。


感谢您的阅读,我坚持原创,十分欢迎并感谢您的关注。


image.png


我是 why,一个被代码耽误的文学创作者,不是大佬,但是喜欢分享,是一个又暖又有料的四川好男人

目录
相关文章
|
人工智能 Java API
Google Gemini API 接口调用方法
Google 最近发布的 Gemini 1.0 AI 模型通过其升级版,Gemini,标志着公司迄今为止最为强大和多功能的人工智能技术的突破。
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
18019 2
|
10月前
|
IDE 开发工具
【开发IDE升级】如何对IDEA版本进行升级
本文介绍了如何将 IntelliJ IDEA Ultimate 从 2020.2.2 版本升级到 2022.3.2 版本。主要内容包括准备工作、卸载旧版本和安装新版本的步骤。首先,从官网下载所需版本并备份旧版配置;接着,通过 Uninstall.exe 卸载旧版,保留配置和插件;最后,安装新版并完成激活。详细的操作步骤和截图帮助用户顺利完成升级过程。
11322 1
【开发IDE升级】如何对IDEA版本进行升级
|
JavaScript
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
解决vue项目build之后部署到服务器访问的时候出现报错:Uncaught SyntaxError: Unexpected token ‘<‘ chunk-vendors:XXXXXX
|
算法 计算机视觉
【MATLAB】CEEMD+FFT+HHT组合算法
【MATLAB】CEEMD+FFT+HHT组合算法
222 0
【MATLAB】CEEMD+FFT+HHT组合算法
|
存储 Oracle Java
Java面试题:描述如何使用Eclipse或IntelliJ IDEA进行Java开发?
Java面试题:描述如何使用Eclipse或IntelliJ IDEA进行Java开发?
160 0
|
SQL 消息中间件 自然语言处理
看完这一篇,ShardingSphere-jdbc 实战再也不怕了
谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC 。 这篇文章,我们聊聊 ShardingSphere-JDBC 相关知识点,并实战演示一番。
|
数据采集 存储 安全
爬虫框架Playwright在Java环境下的开发实践
爬虫框架Playwright在Java环境下的开发实践
565 0
|
Java
无意中发现阿里巴巴Java开发手册「2023最新黄山版」竟然发布了
提起阿里巴巴的《Java开发手册》大家肯定都不陌生,这份手册代表这Alibaba技术团队的集体智慧结晶和内部大佬的经验总结,经历了多次打磨不断的完善,随着市面上各种版本的流出,小编无意中发现了这份【黄山版】。
8246 1
|
开发工具 git
git add也能出错?
git add也能出错?