synchronized与ReentrantLock的区别

ReentrantLock 介绍

ReentrantLock 是可重入锁,synchronized也是可重入锁,即可以频繁加锁同时不造成死锁;

ReentrantLock 是一个类,在使用时要创建实例locker;

locker.lock()即加锁,locker.unlock()即解锁,将可能会引发线程安全的代码放到这两个之间;

由于ReentrantLock 不像synchronized出代码块就是释放锁操作,可能会忘记写unlock或者代码执行到中途直接被return了,于是可以将locker.lock()与线程不安全代码放到try中,在finally中写locker.lock(),于是最终都会将锁释放。

synchronized与ReetrantLock的区别

1.synchronized是关键字,是由JVM用C++实现;ReentrantLock 是标准库中的类;

2.synchronized是通过代码块来进行锁操作,进入代码块即加锁,出代码块即解锁;ReentrantLock 是通过两个方法实现加锁与释放锁,分别为lock()加锁,unlock()解锁;

3.ReentrantLock 中有方法tryLock(),即可以判断是否加锁成功,若成功返回true,失败则返回false,同时也可以向tryLock()中传入时间time,单位ms,即超过time后才会返回true/false;

4.虽然ReetrantLock与synchronized均是非公平锁,但ReentrantLock 可以在创建实例时传入true将锁修改为公平锁,但ReentrantLock 默认是非公平的;

ReentrantLock locker = new ReentrantLock(true);

5.ReentrantLock 的等待唤醒机制是Condition类,有await()/signal()或signalAll(),synchronized则是通过wait()和notify()进行等待和唤醒;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值