Java并发编程之美(1) ReentrantLock重入锁
简介
在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,
JDK6.0版本之后synchronized 得到了大量的优化,使得两者性能差距不大.
与synchronized相比,重入锁有着显示的操作过程,
我们可以手动指定何时加锁,何时释放锁,
因此重入锁对逻辑控制的灵活性要远远好于synchronized,
重入锁可以完全替代synchronized关键字
lock
- 我们先使用最简单的一段代码示例:开启两个线程对一个成员变量做累加
- 可以看到结果跟我们预期的一样
tryLock
tryLock方法两个参数,第一个表示等待时长,第二个表示单位.
锁请求最多5秒,成功得到返回true否则false
tryLock方法也可以不带参数,申请锁成功会立即返回true否则返回false.
这种模式不会引起线程等待,因此也不会导致死锁.
公平锁
一般锁的申请都是非公平的,而公平锁基本可以保证先到先得.因此不会产生饥饿
相对而言公平锁的性能也会非常低下.
可以看到两个线程是交替获得锁
................未完待续.....................