解决线程中使用线程锁

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

解决方案:使用线程锁

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

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

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

相关推荐
bcbnb11 分钟前
移动端webview网页调试实战,首屏加载缓慢问题的排查与优化
后端
00后程序员13 分钟前
Charles抓包工具全面解析 API调试与网络分析的必备利器
后端
AAA修煤气灶刘哥18 分钟前
Java+AI 驱动的体检报告智能解析:从 PDF 提取到数据落地全指南
java·人工智能·后端
xcya21 分钟前
深入理解“看门狗”机制:一种优雅的自动续期模式
后端
行路难多歧路今安在22 分钟前
开源算法or-tools运用之背包问题
后端
阿里云大数据AI技术29 分钟前
【跨国数仓迁移最佳实践6】MaxCompute SQL语法及函数功能增强,10万条SQL转写顺利迁移
python·sql
杜子不疼.1 小时前
《Python学习之文件操作:从入门到精通》
数据库·python·学习
微小的xx1 小时前
java + html 图片点击文字验证码
java·python·html
金色旭光1 小时前
uv 现代化的虚拟环境管理工具
python·python进阶
雨落倾城夏未凉1 小时前
9.c++new申请二维数组
c++·后端