ArrayBlockingQueue源码
2023-08-22 18:13:12 3 举报
ArrayBlockingQueue源码
作者其他创作
大纲/内容
队列空了
指令重排序会影响 items 的可见性,创建一个对象要分为三个步骤:1.分配内存空间2.初始化对象3.将内存空间的地址赋值给对应的引用由于指令重排序的问题,步骤2和步骤3是可能发生重排序的,如下:1.分配内存空间2.将内存空间的地址赋值给对应的引用3.初始化对象所以防止在items未初始化之前,操作items,造成系统错误。
下一个待取出元素索引
生产者阻塞
设计精髓
消费者阻塞
下一个待添加元素索引
属性
条件队列转同步队列,准备唤醒生产者线程
构造参数
为什么不用if ?wait会释放锁,唤醒后,防止队列又被其它线程放满
生产者
条件队列转同步队列,准备唤醒消费者线程
入队方法
加锁不是为了互斥,而是为了保证items可见性
内部锁
出队方法
取出元素,并置位null
入队
出队
队列满了
加锁,中断抛出异常
两个指针从队首向队尾移动,保证队列先进先出原则环形数组,两个指针移动到数组尽头,返回队头
消费者
元素个数
0 条评论
回复 删除
下一页