锁的分类大致如下:公平锁/非公平锁可重入锁/不可重入锁独享锁/共享锁乐观锁/悲观锁分段锁 1、公平锁/非公平锁公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。Reentr ...
分类:
编程语言 时间:
2018-09-26 22:09:08
阅读次数:
200
二、分布式锁应该具备哪些条件 在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件: 1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行; 2、高可用的获取锁与释放锁; 3、高性能的获取锁与释放锁; 4、具备可重入特性; 5、具备锁失效机制,防止死锁; 6、具备非 ...
分类:
其他好文 时间:
2018-09-25 17:59:19
阅读次数:
194
方案1:数据库的唯一 原理:当想要获得锁时,就向表中插入一条记录,释放锁时就删除这条记录。唯一索引录只被插入一次,那么就可以用这个记录是否存在来判断是否存于锁定。 存在的问题 锁没有失效时间,解锁失败的话其他线程无法再获得锁。 只能是非阻塞锁,插入失败直接就报错了,无法重试。 不可重入,已经获得锁的 ...
分类:
其他好文 时间:
2018-09-22 00:57:21
阅读次数:
245
一个小例子帮助理解 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝。由于井水有限,大家只能依次打水。为了实现家家有水喝,户户有水用的目标,村长绞尽脑汁,最终想出了一个比较合理的方案。 首先,在水井边上安排一个看井人,负责维持秩序。 然后,打水时,以家庭为单位,哪个家庭任何 ...
分类:
编程语言 时间:
2018-09-15 20:55:25
阅读次数:
177
今天看到一篇博客:jdk1.8的HashMap和ConcurrentHashMap,我想起了前段时间面试的一个问题:ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是可重入锁? 我想从下面几个角度讨论这个问题: 下面是我对面试中的那个问题的一下看法: 为什么 ...
分类:
其他好文 时间:
2018-09-07 19:19:23
阅读次数:
354
1. 可重入锁 ReentrantLock 和 synchronized 都是可重入锁。 在method1中会调用另外一个synchronized方法method2,此时线程不必重新去申请锁,而是可以直接执行方法method2。如果不具有可重入性,则会造成死锁。 2. 可中断锁 Lock 是可中断锁 ...
分类:
编程语言 时间:
2018-09-03 22:59:44
阅读次数:
263
【原文】https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程。 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要用到了两个内容 1)创建一个标记 flag,让程序进行判断: 当flag != 1 时,print1... ...
分类:
编程语言 时间:
2018-08-31 21:05:57
阅读次数:
127
概述 LinkedBlockingQueue内部由单链表实现,只能从head取元素,从tail添加元素。添加元素和获取元素都有独立的锁,也就是说LinkedBlockingQueue是读写分离的,读写操作可以并行执行。LinkedBlockingQueue采用可重入锁(ReentrantLock)来 ...
分类:
数据库 时间:
2018-08-30 15:44:33
阅读次数:
185
ReentrantLock概述 ReentrantLock是Lock接口的实现类,可以手动的对某一段进行加锁。ReentrantLock可重入锁,具有可重入性,并且支持可中断锁。其内部对锁的控制有两种实现,一种为公平锁,另一种为非公平锁。ReentrantLock的实现原理为volatile+CAS ...
分类:
其他好文 时间:
2018-08-26 18:16:29
阅读次数:
171
1、自旋锁,自旋,jvm默认是10次,由jvm自己控制,for去争取锁 2、阻塞锁 被阻塞的线程,不会争夺锁 3、可重入锁,多次进入改锁的域 4、读写锁 5、互斥锁,锁本身就是互斥的 6、悲观锁,不相信这里是安全的,必须全部上锁 7、乐观锁,相信这里是安全的 8、公平锁,有优先级的锁 9、非公平锁, ...
分类:
编程语言 时间:
2018-08-23 19:20:00
阅读次数:
286