JUC02——Lock接口

本文详细对比了Java中的synchronized和Lock机制,分析了它们在使用上的区别和特点。Lock提供了更广泛的锁操作,需要手动释放,不响应中断,但能判断锁状态并支持多个条件对象。在竞争资源激烈时,Lock的性能优于synchronized。使用Lock需要注意在finally块中释放锁以避免死锁。
摘要由CSDN通过智能技术生成
一、Synchronized

 虽然可以使用 synchronized 来定义方法,但 synchronized 并不属于方法定义的一部分,也就是说,synchronized 关键字不能被继承。如果在父类中的某个方法使用了 synchronized 关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上 synchronized 关键字才可以。当然,还可以在子类方法中调用父类中相应的方法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此,子类的方法也就相当于同步了。

二、Lock

 Lock 提供了比 Synchronized 更广泛的操作。它允许更灵活的结构,具有非常不同的属性,并且可能支持多个关联的条件对象。Lock 提供了比 synchronized 更多的功能。
 Lock 与的 Synchronized 区别:
 ①Lock 不是 Java 语言内置的,synchronized 是 Java 语言的关键字,因此是内置特性。Lock 是一个类,通过这个类可以实现同步访问;
 ②Lock 和 synchronized 有一点非常大的不同,采用 synchronized 不需要用户去手动释放锁,当 synchronized 方法或者 synchronized 代码块执行完之后,系统会自动让线程释放对锁的占用;而 Lock 则必须要用户去手动释放锁,如果没有主动释放锁,就有可能导致出现死锁现象;
 Lock接口定义:

public interface Lock {
	void lock();
	void lockInterruptibly() throws InterruptedException;
	boolean tryLock();
	boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
	void unlock();
	Condition newCondition();
}

 1、lock()
  lock()方法是平常使用的最多的一个方法,就是用来获取锁。如果锁已被其他线程获取,则进行等待。
  使用 Lock,必须主动去释放锁,并且在发生异常时,不会自动释放锁。因此一般来说,使用 Lock 必须在 try{}catch{}块中进行,并且将释放锁的操作放在finally 块中,以保证锁一定被被释放,防止死锁的发生。通常使用 Lock 来进行同步的话,是以下面这种形式去使用的:

Lock lock = ...;
lock.lock();
try{
	//处理任务
}catch(Exception ex){
	ex.printStackTrace();
}finally{
	lock.unlock(); //释放锁
}
三、Lock和synchronize的区别

 1、Lock 是一个接口,而 synchronized 是 Java 中的关键字,synchronized 是内置的语言实现;
 2、synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象,因此使用 Lock 时需要在 finally 块中释放锁;
 3、Lock 可以让等待锁的线程响应中断,而 synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断;
 4、通过 Lock 可以知道有没有成功获取锁,而 synchronized 却无法办到;
 5、Lock 可以提高多个线程进行读操作的效率。
 从性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时 Lock 的性能要远远优于synchronized。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值