[关闭]
@lzb1096101803 2016-03-15T19:15:07.000000Z 字数 1093 阅读 543

synchronized和reentrantLock区别

电话面试


ReentrantLock拥有与 synchronized 相同的并发性和内存语义

需要使用import 引入相关的Class
不能忘记在finally 模块释放锁,这个看起来比synchronized 丑陋
synchronized可以放在方法的定义里面, 而reentrantlock只能放在块里面. 比较起来, synchronized可以减少嵌套

Condition是Java5以后出现的机制,它有更好的灵活性,而且在一个对象里面可以有多个Condition(即对象监视器),则线程可以注册在不同的Condition,从而可以有选择性的调度线程,更加灵活。
Synchronized就相当于整个对象只有一个单一的Condition(即该对象本身)所有的线程都注册在它身上,线程调度的时候之后调度所有得注册线程,没有选择权,会出现相当大的问题

ReentrantLock 的lock机制有2种,忽略中断锁和响应中断锁,这给我们带来 了很大的灵活性。比如:如果A、B2个线程去竞争锁,A线程得到了锁,B线程等待,但是A线程这个时候实在有太多事情要处理,就是 一直不返回,B线程可能就会等不及了,想中断自己,不再等待这个锁了,转而处理其他事情。这个时候ReentrantLock 就提供了2种机制,第一,B线程中断自己(或者别的线程中断它),但是ReentrantLock 不去响应,继续让B线程等待,你再怎么中断,我全当耳边风(synchronized原语就是如此);第二,B线程中断自己(或者别的线程中断它),ReentrantLock 处理了这个中断,并且不再等待这个锁的到来

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注