基于 wait 和 notifyAll 实现简单的阻塞队列
所属分类 java
浏览量 1031
Object.wait() 释放锁,并进入等待队列
Object.notify() 唤醒等待队列里的任一线程(唤醒哪一个不确定)
Object.notifyAll() 唤醒等待队列里的所有线程
wait notify notifyAll 配合 synchronized 使用
否则抛异常 java.lang.IllegalMonitorStateException
对象 监视器
锁 等待队列 WaitSet 同步队列 EntrySet
notify()/notifyAll() 把等待队列中的线程放到同步队列
synchronized 非公平的锁,竞争激烈的话,某些线程可能一直不会执行
public class SimpleBlockQueue {
private final int maxSize;
private final LinkedList
该例子里 使用 notify 可能死锁
线程状态切换 BLOCKED WAITING RUNNABLE
完整代码
https://gitee.com/dyyx/hellocode/blob/master/src/SimpleBlockQueue.java
ReentrantLock原理
基于 ReentrantLock Condition await signalAll 实现简单的阻塞队列
Lock和synchronized的区别
synchronized知识点
java线程状态及转换
上一篇
下一篇
java线程状态及转换
LockSupport简介
ReentrantLock原理
基于 ReentrantLock Condition await signalAll 实现简单的阻塞队列
Synchronized 和 AQS 实现要点
java死锁实例