java中的队列

Qeue队列:
ArrayBlockingQeue:基于数组结构的有界阻塞队列,是先进先出原则进行排序
LinkedBlockingQueue:基于链表结构的阻塞队列,是先进先出排序元素,吞吐量高
SynChronousQueue:一个不存储元素的元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态
DelayQueue:延迟队列,元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素。
                      DelayQueue是一个没有大小限制的队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,
                      而只有获取数据的操作(消费者)才会被阻塞。
PriorityBlockingQueue 基于优先级的阻塞队列(优先级的判断通过构造函数传入的Compator对象来决定)。
    1.放入数据
    (1)offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.
       (2)offer(E o, long timeout, TimeUnit unit):可以设定等待的时间,如果在指定的时间内,还不能往队列中加入BlockingQueue,则返回失败。
    (3)put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,
                     则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.

  2. 获取数据
    (1)poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null;
    (2)poll(long timeout, TimeUnit unit):从BlockingQueue取出一个队首的对象,如果在指定时间内,
                     队列一旦有数据可取,则立即返回队列中的数据。否则知道时间
                    超时还没有数据可取,返回失败。
    (3)take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到BlockingQueue有新的数据被加入; 
    (4)drainTo():一次性从BlockingQueue获取所有可用的数据对象(还可以指定获取数据的个数),通过该方法,可以提升获取数据效率;
                        不需要多次分批加锁或释放锁

处理方式    抛出异常    返回特殊值  一直阻塞     超时退出
插入方法    add(e)    offer(e)    put(e)    offer(e,time,unit)
移除方法    remove()    poll()    take()    poll(time,unit)
检查方法    element()    peek()    不可用    不可用
----------------------------------------------------------------------------------------------------------
AbstractQueuedSynchronizer(AQS)抽象的队列式的同步器
AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)
                                               Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)。

isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它。
tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败则返回false。
tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败则返回false。
tryAcquireShared(int):共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表示成功,且有剩余资源。
tryReleaseShared(int):共享方式。尝试释放资源,如果释放后允许唤醒后续等待结点返回true,否则返回false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐之白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值