wait/notify/join/设计模式

JUC

wait

  • obj.wait() 让进入 object 监视器的线程到 waitSet 等待
  • wait()方法会释放对象的锁,进入 WaitSet 等待区,从而让其他线程就机会获取对象的锁。无限制等待,直到 notify 为止
  • wait(long n)有时限的等待,到 n 毫秒后结束等待,或是被 notify
  • sleep 是 Thread 方法,而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用,但 wait 需要 和 synchronized 一起用 3) sleep 在睡眠的同时,不会释放对象锁的,但 wait 在等待的时候会释放对象锁 4) 它们 状态 TIMED_WAITING

notify

obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒 obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒

join

设计模式 - 保护暂停模式

即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)JDK 中,join 的实现、Future 的实现,采用的就是此模式 因为要等待另一方的结果,因此归类到同步模式

设计模式 - 生产者消费者模式

要点 与前面的保护性暂停中的 GuardObject 不同,不需要产生结果和消费结果的线程一一对应 消费队列可以用来平衡生产和消费的线程资源 生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据 消息队列是有容量限制的,满时不会再加入数据,空时不会再消耗数据 JDK 中各种阻塞队列,采用的就是这种模式

相关推荐
听风的码21 分钟前
Vue2封装Axios
开发语言·前端·javascript·vue.js
肉夹馍不加青椒26 分钟前
第三十三天(信号量)
java·c语言·算法
现在,此刻27 分钟前
面试题储备-MQ篇 2-说说你对RocketMQ的理解
java·rocketmq·java-rocketmq
Leo来编程31 分钟前
设计模式1-单例模式
单例模式·设计模式
危险库36 分钟前
单例模式:确保一个类只有一个实例【设计模式】
javascript·单例模式·设计模式
诗句藏于尽头43 分钟前
更改jar素材后打包
java·jar
SimonKing1 小时前
开源新锐:SQL玩转搜索引擎?Manticore颠覆你的认知
java·后端·程序员
素界UI设计1 小时前
建筑行业变革:用Three.js构建BIM数据可视化孪生平台
开发语言·javascript·信息可视化
中国lanwp2 小时前
Jenkins Pipeline中参数化构建
java·jenkins
记录Java学习的三木2 小时前
Java:将视频上传到腾讯云并通过腾讯云点播播放
java