synchronized为什么是非公平锁
时间: 2023-12-07 16:28:13 浏览: 126
synchronized枷锁实例
synchronized 是一种内置的锁机制,用于实现线程之间的同步。它是非公平锁的一种实现方式,这意味着在多个线程竞争同一个锁时,没有明确的顺序保证,无法保证先来后到的顺序。
synchronized 是非公平锁的原因有以下几点:
1. 性能考虑:非公平锁相较于公平锁的开销更小。在公平锁中,每个线程在等待锁时会按照先后顺序排队,需要维护一个有序队列。而非公平锁则没有维护这个队列的开销,所以在高并发情况下,非公平锁具有更高的吞吐量。
2. 竞争环境下的效率:在多个线程竞争同一个锁的情况下,非公平锁允许新来的线程插队获取锁,减少了线程切换的开销。如果当前持有锁的线程释放锁后,正好有一个新的线程在等待获取锁,那么这个新的线程就可以立即获取到锁,而不需要通过竞争和等待其他线程释放锁。
然而,非公平锁也存在一些问题:
1. 不公平性:非公平锁可能导致某些线程长时间处于等待状态,而其他线程反复获取锁,造成线程饥饿现象。
2. 可能产生优先级倒置:如果高优先级的线程在一直等待低优先级的线程释放锁时,可能会导致优先级倒置的问题,即高优先级的线程无法获得锁,降低了系统的响应性能。
相关问题:
1. 什么是公平锁?请举例说明。
2. synchronized 关键字有哪些使用方法?
3. Java 中除了 synchronized 之外,还有哪些线程同步机制?
阅读全文