互斥锁:同时只能有一个线程获得锁。比如,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
前言:本文解决的问题 RentrantLock与Synchronized区别 ReentrantLock特征 ReentrantLock类的方法介绍 1.什么是ReentrantLock 1.1ReentrantLock 与Synchronized区别 在面试中询问ReentrantLock与Syn ...
分类:
编程语言 时间:
2018-09-15 20:51:27
阅读次数:
1012
JDK1.5-Lock 在 jdk1.5 之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,Lock 接口提供了与 synchronized 关键字类似的同步功能,但需要在使用时手动获取锁和释放锁。 Lock写法 Lock lock = new ReentrantLock(); ...
分类:
编程语言 时间:
2018-09-14 16:02:58
阅读次数:
184
1. 前言 Java中好多地方用到AbstractQueuedSynchronizer(PS:简称AQS),比如ReentrantLock、线程池,这部分在面试的时候也经常被问到,今天以ReentrantLock为例,通过源码来加深对AQS的理解 2. lock 通常,我们的用法是这样的: 那么lo ...
分类:
其他好文 时间:
2018-09-12 20:06:42
阅读次数:
199
五、互斥同步 Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized,而另一个是 JDK 实现的 ReentrantLock。 1.1 synchronized 1. 同步一个代码块 它只作用于同一个对象,如果调用两个对象上的同步代码块,就不 ...
分类:
编程语言 时间:
2018-09-10 00:56:04
阅读次数:
148
一.线程安全出现原因: 原因: 原本不应该拆开的两个步骤中间,被其他线程插足。 解决方案:(java中的同步机制 [synchronized] 来解决),具体有下面三种 a. 同步代码块 b. 同步方法 c. Lock接口 创建:Lock lock = new ReentrantLock(); 霸占 ...
分类:
编程语言 时间:
2018-09-04 10:33:31
阅读次数:
187