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

相关推荐
郝学胜-神的一滴15 分钟前
Effective Python 第39条:通过@classmethod多态来构造同一体系中的各类对象
开发语言·python·程序人生·软件工程
聪明的笨猪猪38 分钟前
Java “并发工具类”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
whltaoin1 小时前
Spring Boot 常用注解分类整理(含用法示例)
java·spring boot·后端·注解·开发技巧
IT森林里的程序猿1 小时前
基于Python的招聘信息可视化分析系统
开发语言·python
charlie1145141911 小时前
精读C++20设计模式——结构型设计模式:外观模式
c++·学习·设计模式·c++20·外观模式
卷Java1 小时前
用户权限控制功能实现说明
java·服务器·开发语言·数据库·servlet·微信小程序·uni-app
从零开始学习人工智能1 小时前
Spring Security 实战:彻底解决 CORS 跨域凭据问题与 WebSocket 连接失败
java·websocket·spring
Derrick__12 小时前
Python常用三方模块——psutil
开发语言·python
winrisef2 小时前
删除无限递归文件夹
java·ide·python·pycharm·系统安全
悦悦子a啊2 小时前
Java面向对象练习:Person类继承与排序
java·开发语言·python