Java并发编程-wait与notify详解及案例实战
文章目录
- 概述
- wait()
- notify()
- 作用
- 注意事项
- 用wait与notify手写一个内存队列
- wait与notify的底层原理:monitor以及wait_set
- Monitor(监视器)
- Wait Set(等待集合)
- Wait() 原理
- Notify() / NotifyAll() 原理
- 注意事项
- wait与notify在代码中使用时的注意事项总结
- 案例实战:基于wait与notify实现edits_log批量刷磁盘
- 生产者线程(积累日志并触发批量写入)
- 消费者线程(负责将日志条目写入磁盘)
- 使用示例
概述
在Java中,wait()
和 notify()
是Object类提供的两个方法,用于线程间同步和通信,它们在多线程编程中扮演着关键角色,尤其是在实现生产者-消费者模型、线程协作等场景中。
wait()
wait()
方法使当前执行该方法的线程进入等待(阻塞)状态,并且释放它所持有的对象的锁。调用 wait()
的线程会暂停执行,直到其他线程调用同一个对象的 notify()
或 notifyAll()
方法。这个过程允许其他等待该对象锁的线程有机会执行。wait()
可以有带超时参数的版本,允许线程等待特定的时间后自动醒来。
notify()
notify()
方法用来唤醒一个正在等待(因为调用了 wait()
方法)该对象的线程。当 notify()
被调用时,JVM会从等待该对象监视器的所有线程中随机选择一个,并将其从等待状态转移到可运行状态。需要注意的是,被唤醒的线程不会立刻执行,它需要重新获取到对象的锁之后才能继续执行(这意味着它可能需要再次等待,如果锁还没有可用的话)。
作用
- 线程同步:
wait()
和notify()
机制帮助实现线程间的同步,确保在某个条件满足之前