解决线程中使用线程锁

问题:多线程操作同一个对象,利用锁保证数据操作的原子性

解决方案:使用线程锁

简要说明:线程锁本质上就是添加一个公共状态量,当线程拿到状态量后,则继续执行,否则就等待

扩展1:自己实现这个功能其实也很方便,可以创建一个队列,里边只塞一个值,每一个添加锁的线程,都去queue.get()值,拿到值会继续往下执行,否则等待,拿到值的等运行结束后,再往队列里queue.put()一个值即可。这里利用了队列本身的特性,当队列里没有值时,队列会处于阻塞状态。等到队列里有值时,会第一时间将值取出

扩展2:添加一个公共变量lock=1。当有线程拿到这个公共变量后,立即将lock值赋值为0,在条件中判断当lock为1时,继续执行,否则阻塞。拿到1值后的线程执行无再将值赋为1即可。另外一个线程逻辑可能会复杂一些,需要隔一段时间取一次lock值进行判断(心跳模式)。理论上讲,这种方式存在一定的隐患,没有很建议。

相关推荐
舒克日记2 分钟前
基于springboot的民谣网站的设计与实现
java·spring boot·后端
风象南4 分钟前
除了JSON/XML,你还应该了解的数据描述语言ASN.1 —— 附《SpringBoot实现ASN.1在线解析工具》
后端
科学创新前沿6 分钟前
机器学习催化剂设计专题学习
python·学习·机器学习·催化剂·催化剂设计
JaguarJack7 分钟前
深入理解 PHP-FPM 的最佳配置
后端·php
Kiri霧1 小时前
在actix-web应用用构建集成测试
后端·rust·集成测试
Victor3561 小时前
Redis(67)Redis的SETNX命令是如何工作的?
后端
Victor3561 小时前
Redis(66)Redis如何实现分布式锁?
后端
凤山老林2 小时前
新一代Java应用日志可视化与监控系统开源啦
java·后端·开源
C嘎嘎嵌入式开发2 小时前
(六)机器学习之图卷积网络
人工智能·python·机器学习
DataLaboratory6 小时前
Python爬取百度地图-前端直接获取
爬虫·python·百度地图