0 0

多个对象处于wait状态,notify之后JVM怎么确定唤醒哪个?5

有A1,A2,A3三个对象锁,并且如果A1,A2,A3都在obj.wait(),则obj B调用obj.notify()只能唤醒A1,A2,A3中的一个(具体哪一个由JVM决定)。

唤醒时并不是按照优先级来唤醒,那么请问JVM怎么确定唤醒哪个?
2013年7月24日 12:50

5个答案 按时间排序 按投票排序

0 0

JDK已经明确说明唤醒哪个thread是随意决定的,取决于厂商的具体实现
The choice is arbitrary and occurs at the discretion of the implementation

2013年7月25日 11:50
0 0

木有特定的顺序

2013年7月25日 07:55
0 0

个人觉得A1,A2,A3在wait的时候应该有顺序的,到notify的时候也应该按照wait产生的顺序唤醒。

2013年7月24日 17:57
0 0

java规范中没有明确说明notify()唤醒哪一个 只是说唤醒其中一个
那么各大厂商的JVM实现起来可能是很不一样的

2013年7月24日 13:41
0 0

notify()是针对某一个对象进行唤醒的吧,如果三个对象(wait)进入阻塞队列,如果不通过notify或者notifyAll去唤醒的话,就会一直在阻塞队列里面,一旦将他们唤醒,他们就处于可运行状态,jvm会根据这些可运行状态的线程优先级来进行判断。

2013年7月24日 13:06

相关推荐

    深入理解Wait、Notify和Wait与sleep区别

    如果多个线程在等待,只有一个线程能被唤醒并进入就绪状态。 3. **notifyAll()**:与`notify()`类似,但它会唤醒所有等待该对象的线程,这些线程都会尝试获取对象锁,最终只有一个成功并继续执行,其他线程仍然会在...

    wait,notify等线程知识.pdf

    如果有多个线程在等待,哪个线程被唤醒是不确定的,由JVM决定。一旦被唤醒,线程并不立即执行,而是需要再次竞争锁,只有获得锁的线程才能继续执行。 3. **notifyAll()**: 与notify()类似,notifyAll()会唤醒所有...

    JVM线程状态和Thread.sleep的实现原理探究.pdf

    被唤醒的线程状态变为RUNNABLE,但只有在获得了对象锁之后,才能恢复执行。 在JVM中,Java线程状态的保存和管理是通过java.lang.Thread类中的threadStatus字段实现的。JVM在创建线程时会分配一个Thread实例,该实例...

    Java wait和notify虚假唤醒原理

    `wait()`方法使得当前线程等待,释放它所持有的对象的锁,并进入等待池,直到其他线程调用该对象的`notify()`或`notifyAll()`方法唤醒它。而`notify()`或`notifyAll()`则是用来唤醒等待池中等待该对象的线程。`...

    java笔试题大集合及答案(另附各大公司笔试题)

    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 Allnotity():唤醒所有处入等待状态的线程,注意并不是...

    java多线程设计wait[参考].pdf

    总结来说,Java的多线程设计中的wait/notify机制结合`synchronized`关键字,提供了高效且灵活的线程间协作方式,使得多个线程能够协同工作,有效管理共享资源。在实际开发中,正确理解和使用这些机制对于编写健壮的...

    线程编程方面若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

    而`wait()`属于`Object`类,调用`wait()`会让线程放弃对象锁,进入等待状态,等待其他线程调用`notify()`或`notifyAll()`来唤醒。 线程同步是为了保护共享数据的安全性。当多个线程访问共享资源时,如果不加以同步...

    java多线程设计wait.docx

    - **`notify()`**:调用对象的`notify()`方法会随机唤醒一个正在等待该对象锁的线程,如果有多个线程在等待,则具体唤醒哪一个由JVM决定。 - **`notifyAll()`**:调用对象的`notifyAll()`方法会唤醒所有正在等待该...

    08 集体协作,什么最重要?沟通!—线程的等待和通知.pdf

    wait()方法会使当前线程进入等待状态,释放它所持有的锁,直到其他线程调用同一对象的notify()或notifyAll()方法唤醒它。而notify()方法会选择一个正在等待该对象锁的线程并唤醒它,允许其继续执行。 2. 同步 线程...

    线程同步唤醒,等待

    - `wait()`: 当一个线程调用某个对象的`wait()`方法时,它会释放该对象的锁,并进入等待状态,直到其他线程调用该对象的`notify()`或`notifyAll()`方法将其唤醒。等待的线程并不会立即执行,而是需要重新竞争锁,...

    JAVA面试题集合面试技能大全

    notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 Allnotity():唤醒所有处入等待状态的线程,注意并...

    63-Java多线程知识点总结1

    Java多线程知识点总结 Java多线程知识点总结主要讲解了Java中多线程编程的基础知识,包括线程的启动、volatile变量、多线程共享数据、wait、...4. 如果是真多线程,比如多个生产者,多个消费者,用notifyAll更合适。

    超级有影响力霸气的Java面试题大全文档

    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 17、...

    Java同步与异步[文].pdf

    当其他线程调用此对象的notify()或notifyAll()方法时,处于等待状态的线程会被唤醒,并再次尝试获取该对象的锁。 4. ThreadLocal类: ThreadLocal是Java提供的一种线程局部变量,它为线程提供一个线程内全局唯一的...

    JAVA面试题集模板.doc

    notify() 唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。Allnotity() 唤醒所有处入等待状态的线程,注意并不是...

    经典Java面试题.pdf

    notify() 唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切地唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。Allnotity() 唤醒所有处入等待状态的线程,注意并不是...

    面试中多线程问题

    当多个线程访问 ThreadLocal 实例时,每个线程维护 ThreadLocal 提供的独立的变量副本。 5. 什么时候抛出 InvalidMonitorStateException 异常,为什么? 调用 wait()/notify()/notifyAll() 中的任何一个方法时,...

    Java面试基础知识.docx

    * notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。 * Allnotity():唤醒所有处入等待状态的线程,注意...

    java多线程试题[汇编].pdf

    3. 当多个线程并发执行时,它们的执行顺序是不确定的,体现出非确定性。 4. Java的对象锁是通过 `synchronized` 关键字实现的,确保同一时间只有一个线程能访问特定资源。 5. 死锁是指多个线程互相等待对方释放资源...

Global site tag (gtag.js) - Google Analytics