解决线程中使用线程锁

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

解决方案:使用线程锁

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

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

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

相关推荐
执念3657 分钟前
MySQL基础
后端
黯_森8 分钟前
Java异常机制
java·后端
sduwcgg9 分钟前
kaggle配置
人工智能·python·机器学习
__lost31 分钟前
Python图像变清晰与锐化,调整对比度,高斯滤波除躁,卷积锐化,中值滤波钝化,神经网络变清晰
python·opencv·计算机视觉
A阳俊yi32 分钟前
Spring Boot日志配置
java·spring boot·后端
海绵波波10736 分钟前
玉米产量遥感估产系统的开发实践(持续迭代与更新)
python·flask
起风了布布37 分钟前
配置版本化是怎么实现的
后端
资深前端外卖员38 分钟前
【nodejs高可用】前端APM应用监控方案 + 落地
前端·后端
健康的猪41 分钟前
golang的cgo的一点小心得
开发语言·后端·golang
斜月43 分钟前
一个服务预约系统该如何设计?
spring boot·后端