synchronized和reentrantlock的区别

https://www.jianshu.com/p/c6a602be4994
首先是reentrantlock会更灵活一些。参考网上的:
首先他们的相似之处在于,都是加锁方式同步,而且都是阻塞式同步,也就是说当一个线程获得对象锁之后,进入同步块,其他访问该同步块的线程都必须阻塞在该同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态和核心态之间来回切换)

功能上的区别:
synchronized是java语言的关键词,他是需要jvm实现的,并且可以修饰方法,也可以修饰代码块 :

public synchronized void test()
synchronized(this)

ReentrantLock是jdk1.5之后提供的API层面的互斥锁,需要用 lock()和unlock()并配合 try/catch /finally语句来完成

便利性:

synchronized肯定是更便利的,主要在于当出现异常的时候,就会自动解锁,而reentrantLock则相对不方便一点,需要手动声明加锁和释放锁的方法,而且为了避免忘记手动释放锁,一般会在finally中声明释放锁

锁的颗粒度和灵活度

网上说
很明显ReenTrantLock优于synchronized,更灵活能理解,因为他可以手动的设置开锁和闭锁吧。灵活体现在:1.可以使用trylock来尝试锁定,不管锁定与否,方法都继续执行2.可以根据trylock的返回值来判定是否锁定3.可以指定
trylock的时间,由于trylcok(time)会抛出异常,而又不能通过异常直接解锁,使用要注意unlock的处理,必须放在finally中4.设置interrupt来进行打断5.还可以设置为公平锁

公平锁的概念:

有好多线程在争夺一个被占据资源,当这个资源释放出来之后,这些线程就会竞争这个资源,如果是公平竞争,是看谁等的时间长谁就得到这个资源,这个锁就是公平锁,。而默认的synchronized是非公平锁,不用计算谁等的时间更长,所以相对的效率会高一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值