Java 线程离开等待队列的顺序
如果我使用同步方法或锁,并且一些线程进入等待队列,那么它们是否按照与进入队列相同的顺序离开等待队列?换句话说,进入等待队列的第一个线程是否也先离开它?否,Java 线程离开等待队列的顺序,java,multithreading,Java,Multithreading,如果我使用同步方法或锁,并且一些线程进入等待队列,那么它们是否按照与进入队列相同的顺序离开等待队列?换句话说,进入等待队列的第一个线程是否也先离开它?否,JVM随机选择一个线程从等待状态唤醒,或者使用notify()或notifyAll()唤醒它们。特别是使用notify()时,只会随机选择一个线程进入执行状态,而使用notifyAll()时,所有等待的线程将一起进入执行状态,但无法保证它们的执行顺序 但是有没有一种方法可以实现我提到的使用syncronized方法的行为?@Rohit:你必须使
JVM
随机选择一个线程从等待状态唤醒,或者使用notify()
或notifyAll()
唤醒它们。特别是使用notify()
时,只会随机选择一个线程进入执行状态,而使用notifyAll()
时,所有等待的线程将一起进入执行状态,但无法保证它们的执行顺序 但是有没有一种方法可以实现我提到的使用syncronized方法的行为?@Rohit:你必须使用ReentrantLock。看到这个问题了吗?这是一个重复的问题。我检查了这个问题,但我想知道ReentrantLock是确保这种行为的唯一方法吗?顺便说一句,这个答案的措辞不好,Stephen C的评论适用。