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 中各种阻塞队列,采用的就是这种模式

相关推荐
山禾女鬼00121 分钟前
JavaScript常见事件和修饰符
开发语言·javascript·ecmascript
程序员小续1 小时前
Node.js学习指南
开发语言·前端·javascript·node.js·ecmascript·es6
Cuit小唐1 小时前
qt使用MQTT协议连接阿里云demo
开发语言·qt
半桔2 小时前
七大排序思想
c语言·开发语言·数据结构·c++·算法·排序算法
四念处茫茫2 小时前
【C语言系列】深入理解指针(5)
c语言·开发语言·visual studio
关关钧2 小时前
【R语言】获取数据
开发语言·r语言
程序员黄同学2 小时前
Java 中的 Spring 框架,以及 Spring Boot 和 Spring Cloud 的区别?
java·spring boot·spring
yang_shengy2 小时前
【JavaEE】Spring(9):Spring事务
java·spring·java-ee
夕阳下的一片树叶9132 小时前
后端生成二维码
java
SomeB1oody3 小时前
【Rust自学】20.2. 最后的项目:多线程Web服务器
服务器·开发语言·前端·后端·设计模式·rust