各种锁的名词解释

1、公平锁/非公平锁

公平锁,是按申请锁的先后顺序依次获取锁。

非公平的锁,不是按照线程申请的顺序获取锁,可能发生后申请线程比先申请的线程先获得锁。

ReentrantLock中可以通过构造方法指定是否为公平锁,默认为非公平锁,非公平锁的优点在于吞吐量大。

synchronized一直都是非公平锁。

2、可重入锁

可重入锁,是指一个线程获取锁之后再尝试获取锁时会自动获取锁。

ReentrantLock和synchronized都是可重入锁。

3、独享锁/共享锁

独享锁,也叫互斥锁,是指锁一次只能被一个线程持有。

共享锁,是指锁一次可以被多个线程持有。

ReentrantLock和synchronized都是独享锁,ReadWriteLock的读锁是共享锁,写锁是独享锁。

4、乐观锁/悲观锁

悲观锁,是指认为对于同一个数据的并发操作必然会发生修改,即使不会发生修改也这么认为,所以一定要加锁。

乐观锁,是指认为对于同一个数据的并发操作不一定会发生修改,在更新数据的时候,尝试去更新数据,如果失败就不断尝试

5、分段锁

分段锁,是一种锁的设计思路,它细化了锁的粒度,主要运用在ConcurrentHashMap中,实现高效的并发操作,当操作不需要更新整个数组时,就只锁数组中的一项就可以了。

6、偏向锁/轻量级锁/重量级锁

这三个锁主要是针对synchronized来说的,要是通过对象监视器在对象头中的字段来表明的。

偏向锁,加锁解锁不需要额外的消耗,适用于只有一个线程访问同步代码快

轻量级锁,竞争的线程不会阻塞,适用于追求相应时间,同步块执行速度快。

重量级锁,适用于追求吞吐量,同步代码快执行时间长。

7、自旋锁

自旋锁,是指尝试获取锁的线程不会阻塞,而是循环的方式不断尝试,这样的好处是减少线程的上下文切换带来的开锁,提高性能,缺点是循环会消耗CPU。

8、监视器锁

synchronized的实现方式,使用monitorenter和monitorexit来实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章