Java Synchronized:默认非公平,可选项公平

你是否疑惑过Java Synchronized关键字究竟是公平锁还是非公平锁?答案并非绝对。

默认情况下,Synchronized是非公平锁。 这意味着线程获取锁的顺序并非先到先得。当一个线程释放锁时,任何一个等待的线程都有可能获得锁,无论其等待时间长短。这是因为Synchronized基于Java内置监视器(Intrinsic Lock)实现,而其默认行为是非公平的。

然而,从Java 5开始,Synchronized提供了对公平锁的支持。 你可以通过在Synchronized关键字后添加'fair'关键字来声明一个公平锁,例如:

synchronized (obj, true) {
    // ...
}

通过这种方式,线程将按照其等待锁的顺序依次获得锁,实现了公平性。

总结:

  • 默认情况下,Synchronized是非公平锁。
  • 可以通过添加'fair'关键字将Synchronized设置为公平锁。

选择使用哪种锁取决于你的具体需求:

  • 非公平锁具有更高的吞吐量,因为线程调度开销更小。
  • 公平锁可以避免线程饥饿问题,确保所有线程都有机会获得锁。

希望这篇文章能够解答你对Synchronized公平性的疑惑!

Java Synchronized是公平锁还是非公平锁?

原文地址: https://www.cveoy.top/t/topic/cpIt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录