课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
锁的应用对于线程安全还是有很大的帮助作用的,而今天我们就通过案例分析来了解一下,软件开发为什么需要分布式锁。
在jdk中为我们提供了多种加锁的方式:
(1)synchronized关键字
(2)volatile+CAS实现的乐观锁
(3)ReadWriteLock读写锁
(4)ReenTrantLock可重入锁
等等,这些锁为我们变成提供极大的便利性,保证在多线程的情况下,保证线程安全。
但是在分布式系统中,上面的锁就统统没用了。
我们想要解决分布式系统中的并发问题,就需要引入分布式锁的概念。
锁的准则
先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:
互斥性。
在任意时刻,只有一个客户端能持有锁。
不会发生死锁。
即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。
具有容错性。
只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
解铃还须系铃人。
加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
具备可重入特性;
具备非阻塞锁特性;
即没有获取到锁将直接返回获取锁失败。
高性能&高可用
多快好省一直使我们追求的目标,加锁带来的时间消耗太大,肯定使我们不想见到的。
锁的公平性
避免饱汉子不知饿汉子饥,饿汉子不知饱汉子虚。保证锁的公平性也比较重要。
分布式锁的实现方式多种多样,此处选择比较流行的redis进行我们的redis锁实现。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。