Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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
conditionVariable.await()在Java监视器类中如何工作_Java_Multithreading - Fatal编程技术网

conditionVariable.await()在Java监视器类中如何工作

conditionVariable.await()在Java监视器类中如何工作,java,multithreading,Java,Multithreading,当监视器对象内的线程调用conditionVariable.await()方法时,我读取到监视器对象中的全局互斥锁已解锁。但是当锁被解锁时,哪个队列优先?因为你们都有一个互斥队列,所有线程都在监视器外等待,还有另一个conditionVariable队列。那么,当互斥锁被解锁时,哪个线程可以访问该对象,对象外部互斥队列中的第一个线程,还是条件变量队列中的第一个线程?哪个队列具有优先级?我假设您正在讨论java.util.concurrent.locks中的监视器锁和条件 一般来说,答案是试图从“

当监视器对象内的线程调用conditionVariable.await()方法时,我读取到监视器对象中的全局互斥锁已解锁。但是当锁被解锁时,哪个队列优先?因为你们都有一个互斥队列,所有线程都在监视器外等待,还有另一个conditionVariable队列。那么,当互斥锁被解锁时,哪个线程可以访问该对象,对象外部互斥队列中的第一个线程,还是条件变量队列中的第一个线程?哪个队列具有优先级?

我假设您正在讨论
java.util.concurrent.locks
中的监视器锁和条件

一般来说,答案是试图从“外部”锁定监视器的线程和从试图从“内部”锁定监视器的条件中被唤醒的线程都会争夺该锁,而获取监视器锁的线程的顺序或公平性(或缺乏公平性)取决于特定的锁实现

该规范表示:

等待返回的线程的锁重新获取顺序 方法与最初获取锁的线程相同,后者 在默认情况下未指定,但对于公平锁,优先于那些 等待时间最长的线程

ReentrantLock
有一个可选的布尔值,用于确定构造时锁的公平性。请注意,设置公平性参数并不能保证特定的线程顺序,它只是试图使其更公平(以牺牲性能为代价)