西安制作网站软件,杭州seo网站建设,成都住建局官网平台,成都黑马程序员培训机构官网一、线程阻塞
例如#xff0c;线程一获取分布式锁#xff0c;但是线程一阻塞时间过长#xff0c;导致锁超时释放。此时线程二获取分布式锁。当线程一阻塞结束后#xff0c;释放分布式锁#xff0c;但是释放的却是线程二的锁。此时线程二就不安全了#xff0c;线程三也可…一、线程阻塞
例如线程一获取分布式锁但是线程一阻塞时间过长导致锁超时释放。此时线程二获取分布式锁。当线程一阻塞结束后释放分布式锁但是释放的却是线程二的锁。此时线程二就不安全了线程三也可以并发执行。解决这个问题可以在释放锁的时候判断一下Redis中存的锁是不是自己的锁只有匹配才释放。 二、垃圾回收机制
这是一种比较极端的情况。线程一正常执行当判断锁是否一致并且结果为一致时还没有来得及释放锁JVM正好触发类似full gc的垃圾回收机制此时阻塞直至分布式锁超时释放。线程二进入当gc完成时线程一由于之前已经判断一致还是释放了锁就又出现了线程并发安全问题。这里我们需要做的是将判断和释放锁过程合并设置为原子性操作。