Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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,如果我使用同步方法或锁,并且一些线程进入等待队列,那么它们是否按照与进入队列相同的顺序离开等待队列?换句话说,进入等待队列的第一个线程是否也先离开它?否,JVM随机选择一个线程从等待状态唤醒,或者使用notify()或notifyAll()唤醒它们。特别是使用notify()时,只会随机选择一个线程进入执行状态,而使用notifyAll()时,所有等待的线程将一起进入执行状态,但无法保证它们的执行顺序 但是有没有一种方法可以实现我提到的使用syncronized方法的行为?@Rohit:你必须使

如果我使用同步方法或锁,并且一些线程进入等待队列,那么它们是否按照与进入队列相同的顺序离开等待队列?换句话说,进入等待队列的第一个线程是否也先离开它?

否,
JVM
随机选择一个
线程从等待状态唤醒,或者使用
notify()
notifyAll()
唤醒它们。特别是使用
notify()
时,只会随机选择一个线程进入执行状态,而使用
notifyAll()
时,所有等待的
线程将一起进入执行状态,但无法保证它们的执行顺序

但是有没有一种方法可以实现我提到的使用syncronized方法的行为?@Rohit:你必须使用ReentrantLock。看到这个问题了吗?这是一个重复的问题。我检查了这个问题,但我想知道ReentrantLock是确保这种行为的唯一方法吗?顺便说一句,这个答案的措辞不好,Stephen C的评论适用。