当前位置: 首页 > news >正文

java 中线程的等待和唤醒

java.lang.Object#wait()
java.lang.Object#wait(long)
java.lang.Object#wait(long, int)
java.lang.Object#notify()
java.lang.Object#notifyAll()

这几个方法属于Object,在使用 synchronized 实现同步的时候,需要使用当前监视器的以上方法,使当前线程处于等待,或者唤醒等待在某个监视器上的线程,这里所说的监视器可以是任一个对象。这些方法必须在当前线程进入到 synchronized 代码块以后才能调用,也就当前线程获取到监视器的情况下才能调用,否则抛异常  java.lang.IllegalMonitorStateException。

public static void main(String[] args) throws InterruptedException {Object o = new Object();o.wait();}
}在没有 synchronized 代码块情况下,直接调用wait() 抛异常,因为没有
synchronized 代码块的情况下,o 对象不可以充当一个监视器,也不需要一个监视器Exception in thread "main" java.lang.IllegalMonitorStateExceptionat java.lang.Object.wait(Native Method)at java.lang.Object.wait(Object.java:502)at com.fll.test.multi_thread.Singleton.main(Singleton.java:30)

    public static void main(String[] args) throws InterruptedException {Object lock = new Object();synchronized (lock) {lock.wait();}}这里在进入 synchronized 代码块以内,调用synchronized所使用的监视器对象 lock 
的wait()方法 没有异常

 必须调用 synchronized 代码块所使用的锁对象的以上方法,

    public static void main(String[] args) throws InterruptedException {Object lock1 = new Object();Object lock2 = new Object();synchronized (lock1) {lock2.wait();}}这里是在 synchronized 代码块以内调用,但是调用不是synchronized所使用的
监视器对象 lock1 的wait()方法 ,而是调用的lock2的 抛出异常Exception in thread "main" java.lang.IllegalMonitorStateExceptionat java.lang.Object.wait(Native Method)at java.lang.Object.wait(Object.java:502)at com.fll.test.multi_thread.Singleton.main(Singleton.java:37)


http://www.mrgr.cn/news/24542.html

相关文章:

  • 【hot100-java】【接雨水】
  • 使用WordCloud报错‘ImageDraw‘ object has no attribute ‘textbbox‘
  • [leetcode-python]最长回文子串
  • Spring Boot 集成 MongoDB - 入门指南
  • 鸿蒙开发(NEXT/API 12)【WebSocket连接】 网络篇
  • 76-mysql的聚集索引和非聚集索引区别
  • 【专题】2024年8月数字化、数智化行业报告合集汇总PDF分享(附原数据表)
  • 卷积神经网络(一)
  • MongoDB根据字段内容长度查询语句
  • Win10 9月更新补丁KB5043064发布:21H2/22H2用户不容错过!
  • 鸿蒙应用开发者基础认证题库
  • vue3页面组件中怎么获取上一个页面的路由地址
  • 时序预测 | MATLAB实现BKA-XGBoost(黑翅鸢优化算法优化极限梯度提升树)时间序列预测
  • OJ在线评测系统 前端开发设计优化通用菜单组件 初始化JS全局项目入口
  • 安泰功率放大器在压电马达中的应用实例
  • c语言是干嘛的
  • C#Join()和GroupJoin的区别
  • 搭子小程序开发搭建,数字化下的“找搭子”文化
  • 高防IP是如何防御攻击
  • Nignx 增加权限(windows)