ReentrantLock是JDK5加入的新类,它的用法和synchronized类似。比过它需要程序员手动添加加锁和解锁的代码。
比起synchronized的好处。它添加了两个方法:
l 提供了tryLock(),该方法调用的时候。如果锁被另一个对象持有,它会返回false。
l 还一个就是公平锁。在构造ReentrantLock的时候。它拥有一个人boolean类型的参数。该参数就是描述使用使用公平锁。公平锁的好吃就是等待的线程不会被饿死,但是效率还低些。公平锁严格按照锁的顺序来获取锁。非公平锁是可以被抢占的。但是它会导入有些需要锁的线程等死。
下面是ReentrantLock的源码:
import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; public class ReentrantLockDemo { ReentrantLock lock = new ReentrantLock(); public void reentrantLockDemoDemo(){ System.out.println("锁的状态:" + lock.tryLock()); if(lock.tryLock()) { System.out.println("方法被锁"); try { System.out.println("方法执行"); TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }finally{ lock.unlock(); System.out.println("锁被释放"); } } else { System.out.println("没有被执行"); } } public void test1(){ Thread thread = new Thread(){ public void run() { reentrantLockDemoDemo(); } }; thread.start(); } public static void main(String[] args) { ReentrantLockDemo rld = new ReentrantLockDemo(); rld.test1(); //ReentrantLockDemo rld2 = new ReentrantLockDemo(); rld.test1(); } }
原文:http://blog.csdn.net/huwenfeng_2011/article/details/44064311