问题:
- synchronized和ReentrantLock有什么全部?
- 有人说synchronized最慢,这话靠谱吗?
回答问题:
synchronized是Java内建的同步机制,所以也有人称其为Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他获取的线程只能等待或者阻塞在那里。
在Java 5以前,synchronized是仅有的同步手段,在代码中,synchronized可以用来修饰方法,也可以使用在特定的代码块上,本质上synchronized方法等同于把方法全部语句用synchronized块包起来。
ReentranLock,通常翻译为再入锁,是Java 5提供的锁实现,他的语义和synchronized基本相同。再入锁通过代码直接调用Lock()方法获取,代码书写也更加灵活。与此同时,ReentrantLock提供了很多实用方法,能够实现很多synchronized无法做到的细节控制,比如可以控制fairness,也就是公平性,或者利用定义条件等。但是,编码中也需要注意,必须明确调用unlock()方法释放,不然就会一直持有该锁。
synchronized和ReentrantLock的性能不能一概而论,早期版本synchronized在很多场景下性能相差较大,在后续版本进行了较多的改进,在低竞争场景中表现可能优于ReentrantLock。
参考:
- 极客时间APP核心技术第十五讲| synchronized和ReentantLock有什么区别?
声明:此为原创,转载请联系作者
作者:微信公众号添加公众号-遛狗的程序员 ,或者可以扫描以下二维码关注相关技术文章。
qrcode_for_gh_1ba0785324d6_430.jpg当然喜爱技术,乐于分享的你也可以可以添加作者微信号:
WXCD.jpeg