1、Lock只是一个接口,基本开一个Lock就是开一个可重入锁: Lock lock = new ReentrantLock(); 2、wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchronized关键字一起使用可以实现等待/通知模 ...
分类:
编程语言 时间:
2018-10-17 14:36:11
阅读次数:
162
1、自旋锁自旋锁可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环,(即所谓的自旋,就是自己执行空循环),若在若干个空循环后,线程如果可以获得锁,则继续执行。若线程依然不能获得锁,才会被挂起。使用自旋锁后,线程被挂起的几率相对减少,线程执行的连贯性相对加强。因此,对于那些锁竞争不是很激烈, ...
分类:
其他好文 时间:
2018-09-29 23:59:55
阅读次数:
334
锁的分类大致如下:公平锁/非公平锁可重入锁/不可重入锁独享锁/共享锁乐观锁/悲观锁分段锁 1、公平锁/非公平锁公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。Reentr ...
分类:
编程语言 时间:
2018-09-26 22:09:08
阅读次数:
200
一个小例子帮助理解 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝。由于井水有限,大家只能依次打水。为了实现家家有水喝,户户有水用的目标,村长绞尽脑汁,最终想出了一个比较合理的方案。 首先,在水井边上安排一个看井人,负责维持秩序。 然后,打水时,以家庭为单位,哪个家庭任何 ...
分类:
编程语言 时间:
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
概述 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