1. Syncronized与ReentrantLock
Synchronized比ReentrantLock进java标准早,因此一开始大家都是用它。相当于Java提供了一种封装的互斥锁机制,对于用户来说,声明成synchronized就可以拿到锁的能力,而不用管具体是怎么加锁解锁的
使用简便也是双刃剑,synchronized的粒度较粗,可控性较差。比如无法中断一个正在等候获得锁的线程,也无法通过投票得到锁等等。很多场景不是一个互斥锁就能搞定的。
所以Java搞了个java.util.concurrent.locks.Lock的接口,并实现了各种类型的锁,其目的就是为了适应各种不同场景下的锁需求,ReenTrantLock就是其中的一种。
ReenTrantLock也是一种互斥锁,但它比Synchronized
提供了更多功能,比如tryLock,拿不到锁立即返回等
可伸缩性更强。可伸缩性意味着在锁竞争的时候能够在调度上少花时间,提高吞吐率,更高效利用CPU
可编程性强,它是一个锁对象,可以在代码里面传来传去,比较灵活
不过ReenTrantLock用起来肯定没有Synchronized方便,要显式解锁,一旦忘了就麻烦了
啊
阿斯顿