Java并发编程之美(1) ReentrantLock重入锁

Java并发编程之美(1)ReentrantLock重入锁

简介

在JDK5.0版本之前,重入锁的性能远远好于synchronized关键字,
JDK6.0版本之后synchronized 得到了大量的优化,使得两者性能差距不大. 
与synchronized相比,重入锁有着显示的操作过程,
我们可以手动指定何时加锁,何时释放锁,
因此重入锁对逻辑控制的灵活性要远远好于synchronized, 
重入锁可以完全替代synchronized关键字

lock

  • 我们先使用最简单的一段代码示例:开启两个线程对一个成员变量做累加
    Java并发编程之美(1) ReentrantLock重入锁

Java并发编程之美(1) ReentrantLock重入锁

  • 可以看到结果跟我们预期的一样

Java并发编程之美(1) ReentrantLock重入锁

tryLock

tryLock方法两个参数,第一个表示等待时长,第二个表示单位.
锁请求最多5秒,成功得到返回true否则false

Java并发编程之美(1) ReentrantLock重入锁

tryLock方法也可以不带参数,申请锁成功会立即返回true否则返回false.
这种模式不会引起线程等待,因此也不会导致死锁.

Java并发编程之美(1) ReentrantLock重入锁

公平锁

一般锁的申请都是非公平的,而公平锁基本可以保证先到先得.因此不会产生饥饿
相对而言公平锁的性能也会非常低下.
Java并发编程之美(1) ReentrantLock重入锁

可以看到两个线程是交替获得锁

Java并发编程之美(1) ReentrantLock重入锁

................未完待续.....................