synchronized为什么是非公平的
时间: 2023-12-07 22:06:13 浏览: 89
synchronized枷锁实例
synchronized为什么是非公平的呢?通过阅读引用1和引用2,我们可以得出结论。在Java中,synchronized关键字的实现有两种方式:公平锁和非公平锁。公平锁会按照线程的请求顺序来获取锁,而非公平锁则允许插队,即当前线程在获取锁时可以抢占已经等待时间很长的线程的锁。
synchronized关键字默认使用非公平锁的原因是为了提高程序的性能。公平锁需要维护一个有序的等待队列,这会增加系统的开销。而非公平锁则不需要维护等待队列的顺序,所以相对更加高效。此外,非公平锁还可以减少线程切换的次数,从而提高程序的执行效率。
需要注意的是,公平锁并不代表绝对的公平性,也不是完全按照请求的顺序获取锁。即使是公平锁,当一个线程释放锁时,下一个获取锁的线程也不一定是等待时间最长的线程,因为存在一些运行时的优化机制,比如线程的优先级等。
综上所述,synchronized是非公平的主要是出于性能方面的考虑,非公平锁的机制能够更高效地处理锁的竞争,并减少线程切换的次数。在实际应用中,我们需要根据具体情况来选择合适的锁模式。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [【锁思想】为什么synchronized的默认策略是非公平的?](https://blog.csdn.net/m0_73311735/article/details/131304965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [为什么Synchronized 是非公平锁?](https://blog.csdn.net/m0_71777195/article/details/131241525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文