ReentrantLock与synchronized一样都可以用来控制多线线程对共享资源的访问。 synchronized关键字是隐式的获得锁,即进入synchronized方法或者synchronized代码会自动的获得锁,离开同步方法或者同步代码块自动释放锁。 ReentrantLock相对于s ...
分类:
其他好文 时间:
2018-10-04 10:04:10
阅读次数:
134
Java中的锁机制:1API层面:Synchronized,AQS(CLH):ReentrantLock,ReentrantReadWriteLock,StampedLock(OrderedRWlocks)2JVM层面:SpinLock,Biased,Stack-Locked(轻量级锁),Inflated(重量级锁)Neutral:UnlockedBiased:Locked/Unlocked+Un
分类:
编程语言 时间:
2018-10-04 09:10:29
阅读次数:
177
synchronized的功能扩展: 重入锁;ReentrantLock; 其实也就是lock对于synchronized的替代了,要注意的一个点就是你可以锁多个,但是你锁了几个,最后就要解锁几个这个问题; 使用lock.lock()加锁,使用lock.unlock()解锁; 提供中断处理; 使用中 ...
分类:
其他好文 时间:
2018-10-01 23:47:58
阅读次数:
325
JAVA的众多锁的机制,包括Semaphore/ReentrantLock/ReentrantReadWriteLock等都是通过 AQS实现的,因为写了上述几个锁实现的源码分析,经常使用到AQS的原理和代码,因此这里做下AQS的源码分析。这样之后再翻看以AQS为基础的各种各样的锁实现就会好理解的多 ...
分类:
其他好文 时间:
2018-09-30 11:24:06
阅读次数:
173
锁的分类大致如下:公平锁/非公平锁可重入锁/不可重入锁独享锁/共享锁乐观锁/悲观锁分段锁 1、公平锁/非公平锁公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。Reentr ...
分类:
编程语言 时间:
2018-09-26 22:09:08
阅读次数:
200
互斥锁:同时只能有一个线程获得锁。比如,ReentrantLock 是互斥锁,ReadWriteLock 中的写锁是互斥锁。 共享锁:可以有多个线程同时获得锁。比如,Semaphore、CountDownLatch 是共享锁,ReadWriteLock 中的读锁是共享锁。 java5 ReadWri ...
分类:
其他好文 时间:
2018-09-23 11:53:02
阅读次数:
866
公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。ReentrantLock 可以设置成公平锁。 《公平锁与非公平锁》 ...
分类:
其他好文 时间:
2018-09-22 10:41:53
阅读次数:
183
之前一篇ReentrantLock的文章如果看过,并且对AQS的代码比较熟知的话,Semaphore的代码阅读起来就相对会轻松很多,如果不熟知的话,可以参考那篇文章或者自行学习下AQS的代码。 这里我们来分析下Semaphore的源码。 Semaphore整理上思路可以理解为一个资源池,资源池中有相 ...
分类:
其他好文 时间:
2018-09-19 19:49:49
阅读次数:
169
同一进程 重入锁 使用ReentrantLock获取锁的时候回判断当前线程是否为获取锁的线程,如果是则将同步的状态+1,释放锁的时候则将状态-1,只有将同步状态的次数置为0的时候才会是最终释放锁。 读写锁 使用ReentrantReadWriteLock,同时维护一对锁:读锁和写锁。当写线程访问时则 ...
分类:
编程语言 时间:
2018-09-18 22:42:05
阅读次数:
239
一个小例子帮助理解 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝。由于井水有限,大家只能依次打水。为了实现家家有水喝,户户有水用的目标,村长绞尽脑汁,最终想出了一个比较合理的方案。 首先,在水井边上安排一个看井人,负责维持秩序。 然后,打水时,以家庭为单位,哪个家庭任何 ...
分类:
编程语言 时间:
2018-09-15 20:55:25
阅读次数:
177