此篇博客所有源码均来自JDK 1.8
重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服...
分类:
编程语言 时间:
2017-03-29 19:22:01
阅读次数:
170
happens-before:描述内存可见性as-if-serial:无论怎么重排序,程序的运行结果不会改变 ReentrantLock依赖了队列同步器AQS,其实现方式是volatile变量的读写操作进行线程间通信,通过CAS修改state值,成功,其state值>0,则取锁成功 Concurre ...
分类:
Web程序 时间:
2017-03-29 16:26:45
阅读次数:
249
ReentranLock是java.util.concurrent.locks中的一个类.需要显示的进行unclock 提供了tryLock方法,锁被其他线程持有返回false,否则当前线程会持有锁,并返回true 可以通过构造函数声明一个公平锁,效率较非公平锁低,按队列顺序获取锁 提供了Reent ...
分类:
其他好文 时间:
2017-03-27 23:46:23
阅读次数:
199
此篇博客所有源码均来自JDK 1.8
ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchro...
分类:
编程语言 时间:
2017-03-26 22:17:56
阅读次数:
215
1.1.1. 读写锁应用之三写锁降级 ReentrantReadWriteLock还具有写锁降级的特点,而这跟可重入性有一些关系。 (1)持有写锁时可以降级为读锁。 (2)持有读锁时不能升级为写锁。 ReentrantReadWriteLock和ReentrantLock相似的是都有一个特点,就是可 ...
分类:
编程语言 时间:
2017-03-24 23:32:43
阅读次数:
363
1.1.1. 条件变量应用之等待通知 条件变量Condition提供了一种基于ReentrantLock的事件等待和通知的机制,并且可以监控任意指定的条件,在条件不满足时等待条件满足,其它线程在条件满足时可以通知等待条件的线程,从而唤醒等待中的线程。 下面的代码实现了两件工作分别由两个线程轮流不断执 ...
分类:
编程语言 时间:
2017-03-24 23:26:39
阅读次数:
393
1.1. 可重入锁ReentrantLock ReentrantLock是java并发库中提供的可重入锁。与synchronized同步块相比,有相似也有不同。相似的地方有: (1)都可以实现多线程之间的同步,避免对共享资源的访问冲突。 (2)都是可重入的,即一个已经获取锁的线程可以再次获得同一个锁 ...
分类:
编程语言 时间:
2017-03-24 21:44:57
阅读次数:
195
1.1.1. 读写锁的应用之一读写分离 读写锁ReentrantReadWriteLock相对于ReentrantLock在特定情况下能提高同步性能,这是因为读写锁有以下特点: (1)读和读可以同时进行。 这一点是ReentrantLock所没有的优点。 (2)读和写不能同时进行。 (3)写和写不能 ...
分类:
编程语言 时间:
2017-03-24 21:41:38
阅读次数:
277
公平锁与非公平锁ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得锁的,先来的未必就一定能先得到锁,从这个角度讲,synchronized其实就是一种非公平锁。非公平锁... ...
分类:
编程语言 时间:
2017-03-23 18:48:21
阅读次数:
371
ReentrantLockReentrantLock,一个可重入的互斥锁,它具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。ReentrantLock基本用法先来看一下ReentrantLock的基本用法:public class Thread... ...
分类:
编程语言 时间:
2017-03-23 18:47:12
阅读次数:
225