大话队列

2024-07-03  本文已影响0人  kele2018
队列名称 是否可以控制队列容量 底层数据结构 加锁方式 特点
ArrayBlockingQueue 可以 数组 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则取菜,并唤醒正在等待的厨师;
4、服务员来取菜,发现没有菜,则等待;
LinkedBlockingQueue 可以 单向链表 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则取菜,并唤醒正在等待的厨师;
4、服务员来取菜,发现没有菜,则等待;
LinkedBlockingDeque 可以 双向链表 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则取菜,并唤醒正在等待的厨师;
4、服务员来取菜,发现没有菜,则等待;
LinkedTransferQueue 不可以 单向链表 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则取菜,并唤醒正在等待的厨师;
4、服务员来取菜,发现没有菜,则等待;
5、厨师炒好菜,发现有服务员在等待,则直接把菜给服务员;
PriorityBlockingQueue 不可以 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜按照一定顺序放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则取菜,并唤醒正在等待的厨师;
4、服务员来取菜,发现没有菜,则等待;
DelayQueue 不可以 ReentrantLock 1、厨师炒好菜,发现餐台有位置,直接把菜按照一定顺序放到餐台,同时唤醒正在等待的服务员;
2、厨师炒好菜,发现餐台没有位置,则等待;
3、服务员来取菜,发现有菜,则看下当前菜是否到时间,到时间则取菜,并唤醒正在等待的厨师;没到时间,自旋等待
4、服务员来取菜,发现没有菜,则等待;
ConcurrentLinkedQueue 不可以 单向链表 cas 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台;
2、厨师炒好菜,发现餐台没有位置,则自旋;
3、服务员来取菜,发现有菜,则取菜;
4、服务员来取菜,发现没有菜,则自旋;
ConcurrentLinkedDeque 不可以 双向链表 cas 1、厨师炒好菜,发现餐台有位置,直接把菜放到餐台;
2、厨师炒好菜,发现餐台没有位置,则自旋;
3、服务员来取菜,发现有菜,则取菜;
4、服务员来取菜,发现没有菜,则自旋;
SynchronousQueue 容量为0 ReentrantLock 1、厨师炒好菜,发现没服务员,则等待服务员;
2、服务员来取菜,发现没厨师,则等待厨师;
上一篇 下一篇

猜你喜欢

热点阅读