2018-11-26 blockingqueue 源码分析

线程安全的阻塞队列 1.ArrayList 设置maxLength 2.put 放入元素 synchronized(lock){} 获得锁 判断list.size()==maxlength lock.wait() 如果没有空间了 线程等待 释放锁 有位置: list.add(); lock.notifyAll(); 多线程的取和拿的时候 每次变动 要唤醒下等待的队列 notifyAll是无序的 但是线程执行是有序列号的 所以被唤醒的线程也会按顺序存进list的 Thread 的优先级 cpu的调度 priority 3.take synchronized(lock){} 获得锁 判断list.size()== 0 lock.wait() 如果没有数据了 线程等待 释放锁 否则 list.get(0); list.remove(0); notifyAll是无序的 但是线程执行是有序列号的 所以被唤醒的线程也会按顺序存进list的 总结 jdk1.5之前 用synchronized关键字 保证线程安全 之后 源码用 ReentrantLock 锁的机制来控制线程安全 lock.unlock() 释放锁 synchronized 生产者和消费者模型 Lock.Condition Producer and Consumer 模型
posted @ 2018-11-26 16:48  行者--天马行空  阅读(91)  评论(0编辑  收藏  举报