ReentrantLock总结

一、ReentrantLock和synchronized的区别
相对于 synchronized 它具备如下特点:
可中断
可以设置超时时间
可以设置为公平锁
支持多个条件变量
与 synchronized 一样,都支持可重入
使用方法

reentrantLock.lock();
try {
 // 临界区
} finally {
 // 释放锁
 reentrantLock.unlock();
}

二、可重入
可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁;如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住。

public class Kechongru {
	
	static Lock lock=new ReentrantLock();

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Kechongru k=new Kechongru();
		k.method1();

	}
	
	void method1()
	{
		lock.lock();
		try
		{
			System.out.println("method1");
			method2();
		}
		
		finally
		{
			lock.unlock();
		}
		
	}
	
	void method2()
	{
		lock.lock();
		try
		{
			System.out.println("method2");
			method3();
		}
		
		finally
		{
			lock.unlock();
		}
		
	}
	
	void method3()
	{
		lock.lock();
		try
		{
			System.out.println("method3");
		}
		
		finally
		{
			lock.unlock();
		}
		
	}
	

}

method1
method2
method3

确实可重入。
三、可中断。
可中断指的是如果一个线程竞争锁失败后被阻塞,另一个线程可以调用打断方法,将这个线程终止,避免长时间等待。
四、锁超时
主要是trylock方法。线程通过tryLock方法尝试获得锁,失败后立刻return。
或者调用tryLock(time)方法,在某个时间内一直尝试获得锁,到了时间还没有得到,立刻return。
五、公平锁
所谓非公平锁,指的是多个线程竞争锁失败后,进入阻塞队列,如果锁被释放了,立刻一拥而上,无所谓先后,争抢锁。
公平锁讲究先来后到。
Lock lock=new ReentrantLock(true);//定义公平锁。
六、条件变量
synchronized 中也有条件变量,就是我们讲原理时那个 waitSet 休息室,当条件不满足时进入 waitSet 等待。
ReentrantLock 的条件变量比 synchronized 强大之处在于,它是支持多个条件变量的,这就好比synchronized 是那些不满足条件的线程都在一间休息室等消息。
而 ReentrantLock 支持多间休息室,有专门等烟的休息室、专门等早餐的休息室、唤醒时也是按休息室来唤醒。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值