java各类锁

一、ReentrantLock获取锁的三种方式

1.lock():获取锁立即返回,别的线程持有锁,当前线程一直处于休眠状态,值到获取锁

2.tryLock():获取锁立即返回true,如果别的线程正持有锁,立即返回false;所以可以选择干别的操作

3.tryLock(long timeout,TimeUnit unit):获取锁立即返回true,如果别的线程持有锁,会等待参数给定的时间,在等待的过程中,如果获取锁定,返回true,如果等待超时,返回false

4.lockInteruptibly:获取锁立即返回,没有获取锁处于休眠状态,值到获取锁,或者当前线程被别的线程中断

二、Lock与sysnchronized区别

1.使用synchronized,如果A不释放,B将一直等待,不能被中断;ReentrantLock,如果A不释放,B在等待足够的时间,中断等待,选择干别的事

2.synchronized在JVM层面实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行出现异常,JVM会自动释放锁定,或者synchronized锁定的方法执行完,自动释放锁。而Lock是通过代码实现的,保证锁一定释放,必须执行unLock(),且放到finally{}

3.资源竞争不激烈的情况下,synchronized性能优于ReetantLock,但资源竞争激烈,synchronized性能会下降几十倍,但ReetrantLock性能能维持常态

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值