Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当多个线程请求同步锁授予顺序时?_Java_Multithreading - Fatal编程技术网

Java 当多个线程请求同步锁授予顺序时?

Java 当多个线程请求同步锁授予顺序时?,java,multithreading,Java,Multithreading,当多个线程尝试获取同步上的锁时,如果一个线程已经获取了锁。 我的理解是,将按照获取锁请求的顺序提供锁 但根据O'Reilly的书,Java线程锁将被给出,这对平台来说是最好的。这是一个非常抽象的说法。我认为平台在这里主要是指操作系统。 我的问题是,JVM根据什么标准来决定什么最适合平台,以及开发人员在开发时如何对其进行说明 做编程 更新:-我知道我可以将锁对象与公平参数一起使用。但只想知道它是如何与同步锁一起工作的?同步的采集遵循一种不公平的锁定策略。也就是说,阻塞时首先进入的线程可能不是第一个

当多个线程尝试获取同步上的锁时,如果一个线程已经获取了锁。 我的理解是,将按照获取锁请求的顺序提供锁

但根据O'Reilly的书,Java线程锁将被给出,这对平台来说是最好的。这是一个非常抽象的说法。我认为平台在这里主要是指操作系统。 我的问题是,JVM根据什么标准来决定什么最适合平台,以及开发人员在开发时如何对其进行说明 做编程


更新:-我知道我可以将锁对象与公平参数一起使用。但只想知道它是如何与同步锁一起工作的?

同步的
采集遵循一种不公平的锁定策略。也就是说,阻塞时首先进入的线程可能不是第一个获取的线程。如果您想要一个
fair
锁,请使用从JDK6开始的
新的ReentrantLock(true)
(在HotSpot JVM中),它使用一种称为偏置锁的算法。看看Oracle的这篇文章,特别是关于偏置锁定的部分。他们引用了这篇文章,进一步描述了算法的细节

至于开发者应该如何解释这一点,我认为唯一重要的是这是不公平的。你有问题。除非你正在编写一个高频交易平台或其他东西,否则不要担心其他事情

通常,您应该支持不公平锁定而不是公平锁定,除非您有理由,因为前者通常具有更高的吞吐量

我的理解是,将按照获取锁请求的顺序提供锁

我相信这只适用于绿色线程(现在没有人真正使用了)

我的问题是,JVM根据什么标准来决定什么最适合平台,以及开发人员在编程时如何考虑它


我不认为JVM在运行时“决定”。线程模型将被编译到JVM中。

您为什么不自己管理锁,以确保一切正常工作?查找有关java锁对象的教程这是一个一般性问题还是您对强制执行锁获取顺序感兴趣?只是一个警告:公平锁定会带来性能损失。信号量也允许公平锁定,但ReentrantLock更好地替代了synchronized。