object.wait() jvm 实现
时间: 2024-06-04 21:09:39 浏览: 17
在 Java 中,所有对象都有一个锁(也称为监视器)。wait() 方法是 Object 类中的方法,它释放当前线程持有的锁,并将线程置于等待状态,直到另一个线程调用相同对象的 notify() 或 notifyAll() 方法来唤醒该线程。
下面是 JVM 中实现 wait() 方法的大致步骤:
1. 当线程调用 wait() 方法时,它释放对象的锁并进入对象的等待池中。
2. 线程将被挂起,直到另一个线程调用相同对象上的 notify() 或 notifyAll() 方法。
3. 一旦线程被唤醒,它会尝试重新获取对象的锁。
4. 一旦线程获得了锁,它就可以从 wait() 方法返回,并继续执行其余的代码。
需要注意的是,在调用 wait() 方法之前,线程必须先获取对象的锁,否则会抛出 IllegalMonitorStateException 异常。此外,当 wait() 方法被唤醒时,并不保证线程立即继续执行,因为它仍然需要等待获取锁。
相关问题
jvm 中的 Monitor 和 ObjectMonitor 的区别
JVM中的Monitor和ObjectMonitor是用于实现Java中的synchronized关键字的机制。它们之间的区别在于以下几个方面:
1. Monitor是一个抽象的概念,而ObjectMonitor是Monitor的具体实现。Monitor是Java中的线程同步机制的基本单位,每个Java对象都有一个对应的Monitor对象。
2. ObjectMonitor是基于操作系统提供的底层同步原语(如互斥锁)来实现的,而Monitor则是在ObjectMonitor的基础上进行了封装和扩展,提供了更高层次的功能(如等待和唤醒)。
3. ObjectMonitor可以被多个线程竞争获取,而且它的所有权是可以转移的。当一个线程获取了ObjectMonitor之后,其他线程就需要等待,直到该线程释放了ObjectMonitor。而Monitor在同一时间只能被一个线程所拥有。
4. ObjectMonitor中维护了一个等待队列,用于存放那些等待获取ObjectMonitor的线程。当一个线程调用了wait()方法后,它会释放ObjectMonitor,并进入等待队列中。当其他线程释放了ObjectMonitor后,其中一个等待线程会被唤醒并重新竞争获取ObjectMonitor。
总结起来,Monitor是对ObjectMonitor进行了封装和扩展,提供了更高级别的功能。ObjectMonitor是具体实现,基于底层同步原语来实现Java中的线程同步机制。
object的常用类
Object类的常用方法包括getClass()、hashCode()、toString()、equals()和finalize()。\[1\]其中,getClass()方法用于返回对象的实际类型,hashCode()方法用于返回对象的哈希码值,toString()方法用于返回对象的字符串表示,equals()方法用于比较两个对象是否相等,而finalize()方法在对象被判断为垃圾对象时由JVM自动调用,用于标记垃圾对象并进行回收。\[2\]此外,Object类还有其他一些常用的方法,如wait()、notify()和clone()等。\[1\]在Java中,还有一些常用的类,如包装类、String类和BigDecimal类等,它们都是Object类的子类或相关类,提供了更多的功能和方法供开发者使用。\[2\]
#### 引用[.reference_title]
- *1* *3* [常用类 — Object](https://blog.csdn.net/weixin_46053060/article/details/118364567)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [常用类](https://blog.csdn.net/m0_45825648/article/details/108941412)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![jar](https://img-home.csdnimg.cn/images/20210720083455.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)