解决线程中使用线程锁

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

解决方案:使用线程锁

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

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

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

相关推荐
uhakadotcom15 分钟前
OpenTelemetry入门:让你的应用程序更透明
后端·面试·github
橘猫云计算机设计23 分钟前
基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
java·spring boot·后端·python·考研·django·毕业设计
超级小的大杯柠檬水37 分钟前
修改Anaconda中Jupyter Notebook默认工作路径的详细图文教程(Win 11)
ide·python·jupyter
有一只柴犬38 分钟前
深入Spring AI:6大核心概念带你入门AI开发
spring boot·后端
Aurora_NeAr1 小时前
深入理解Java虚拟机-垃圾收集器与内存分配策略
后端
2401_840192271 小时前
如何学习一门计算机技术
开发语言·git·python·devops
向阳2561 小时前
SpringBoot+vue前后端分离整合sa-token(无cookie登录态 & 详细的登录流程)
java·vue.js·spring boot·后端·sa-token·springboot·登录流程
巷北夜未央1 小时前
Python每日一题(14)
开发语言·python·算法
大模型真好玩1 小时前
理论+代码一文带你深入浅出MCP:人工智能大模型与外部世界交互的革命性突破
人工智能·python·mcp
你的人类朋友1 小时前
JS严格模式,启动!
javascript·后端·node.js