当一个线程已经获取锁定时,多个线程尝试获取同步锁定。 我的理解是锁定将按获取锁定请求的顺序给出。
但根据O'Reilly的书,Java线程锁定将是最适合平台的。这是非常抽象的陈述。我认为平台主要是指操作系统。 我的问题是什么是基于哪个JVM决定什么是最适合平台以及开发人员如何计算它的标准 做编程?
更新: - 我知道我可以使用具有公平性参数的Lock对象。但只是想知道它如何与同步锁一起工作?
答案 0 :(得分:2)
synchronized
获取遵循non-fair
锁定政策。也就是说,阻塞时首先进入的线程可能不是第一个获取的线程。如果您想要fair
锁,请使用new ReentrantLock(true)
答案 1 :(得分:0)
从JDK6开始(在HotSpot JVM中),它使用称为偏置锁定的算法。请看Oracle的这个white paper,尤其是关于偏置锁定的部分。他们引用this paper进一步描述了算法的细节。
至于开发商应如何解释这一点,IMO唯一重要的部分是它不公平。你有疑问。除非您正在编写高频交易平台或其他东西,否则永远不必担心其他任何事情。
除非您有理由,否则您通常应该支持不公平的锁定以防止公平锁定,因为前者通常具有更高的吞吐量。
答案 2 :(得分:0)
我的理解是锁定将按获取锁定请求的顺序给出。
我相信这只适用于绿色线程(没有人真正使用过它)。
我的问题是什么标准基于哪个JVM决定什么是最适合平台的标准以及开发人员在编程时如何计算它?
我不认为JVM在运行时“决定”。线程模型将被编译到JVM中。