个人学习笔记:java多线程部分容器的API简介

1、ConcurrentLinkedQueue类:

(1)基于链表的无界线程安全队列。此队列对元素FIFO(先进先出)进行排序。队列的头部是队列中最长时间的元素。队列的尾部是队列中最短时间的元素。新元素插入队列的尾部,队列检索操作获取队列头部的元素。(若需要使用基于链表的无界线程安全双端队列,可考虑ConcurrentLinkedDeque )
(2)几个常用方法:
①add方法,将指定元素插入此队列的尾部。由于队列是无限制的,因此该方法永远不会抛出 IllegalStateException或返回false。

public boolean add(E  e)

②offer方法:将指定元素插入此队列的尾部。由于队列是无限制的,因此该方法永远不会返回false。

public boolean offer(E e)

③poll方法:检索并删除此队列的头部,或者null如果此队列为空则返回。

public  E  poll()

④peek方法:检索但不移除此队列的头部,或者null如果此队列为空则返回。

public  E  peek()

add方法与offer方法一样,但需注意poll方法和peek方法的区别,poll会删除队列头部元素,而peek方法不会。

2、LinkedBlockingQueue类:

(1)两个较为常用的构造函数:

//创建一个LinkedBlockingQueue容量为 Integer.MAX_VALUE。
public LinkedBlockingQueue()
//创建LinkedBlockingQueue具有给定(固定)容量的capacity。
public LinkedBlockingQueue(int capacity)

(2)常用方法介绍:
①put方法:将指定的元素插入此队列的尾部,若空间已满,阻塞等待至空间变为可用。

public void put(E e) throws InterruptedException

②offer方法:如果可以在不超出队列容量的情况下立即执行此操作,则将指定元素插入此队列的尾部,true成功返回并且false此队列已满。(也可以设置等待一段时长,若超过时长,则自动放弃)

public boolean offer(E e)
//timeout在放弃之前等待多长时间
public boolean offer(E e,long timeout,TimeUnit unit) throws InterruptedException

③take方法:检索并删除此队列的头部,必要时等待,直到元素可用。

public E take() throws InterruptedException

④获取并删除此队列的头部,或者如果此队列为空则返回null。(也可指定等待一定的时长后在放弃)

public E poll()
public E poll(long timeout,TimeUnit unit) throws InterruptedException

⑤peek方法:获取但不移除此队列的头部,或者如果此队列为空则返回null。

public  E  peek()
3、ArrayBlockingQueue类:

(1)由数组支持的有界阻塞队列。此队列对元素FIFO(先进先出)进行排序。队列的 头部是队列中最长时间的元素。队列的尾部是队列中最短时间的元素。新元素插入队列的尾部,队列检索(retrieval )操作获取队列头部的元素。此类支持用于排序等待生产者和消费者线程的可选公平策略。默认情况下,不保证此顺序。但是,使用公平性构造的队列true以FIFO顺序授予线程访问权限。公平性通常会降低吞吐量,但会降低可变性并避免饥饿。

//创建一个ArrayBlockingQueue具有给定(固定)容量和默认访问策略(非公平)。
ArrayBlockingQueue(int capacity)
//创建ArrayBlockingQueue具有给定(固定)容量和指定的访问策略。
ArrayBlockingQueue(int capacity, boolean fair)

(2)常用方法介绍:
①add方法:在不超出队列容量的情况下立即执行此操作,则将指定元素插入此队列的尾部,成功返回true,如果此队列已满抛出IllegalStateException。

public boolean add(E  e)

②offer方法:类似于add方法,但失败时不会抛出异常,会返回false。

//如果可以在不超出队列容量的情况下立即执行此操作,则将指定元素插入此队列的尾部,成功返回true,此队列已满返回false。
public boolean offer(E e)
//将指定的元素插入此队列的尾部,等待指定的等待时间,如果成功返回true,或者在空间可用之前经过了指定的等待时间返回false。
public boolean offer(E e,long timeout,TimeUnit unit) throws InterruptedException

③put方法:将指定的元素插入此队列的尾部,队列已满时阻塞至队列空间可用。

public void put(E e)

④poll方法:检索并删除此队列的头部,或者如果此队列为空则返回null。

public E poll()
public E poll(long timeout,TimeUnit unit) throws InterruptedException

⑤take方法:检索并删除此队列的头部,必要时等待,直到元素可用。

public E take() throws InterruptedException

⑥peek方法:检索但不移除此队列的头部,如果此队列为空则返回null。

public E peek()
4、DelayQueue类:
//需注意对泛型元素的限制 E extends Delayed,元素需要实现(implements)Delayed接口
//用来指定延迟时间,及重写(Override)compareTo方法。
Class DelayQueue<E extends Delayed>

(1)Delayed元素的一种无界阻塞队列,其中一个元素只有在其延迟到期时才能被使用。 队列的头部是延迟到期的Delayed元素。
(2)常用方法介绍:
①add方法:将指定的元素插入此延迟队列。

boolean	add(E e)

②offer方法:将指定的元素插入此延迟队列。

boolean	offer(E e)

③put方法:将指定的元素插入此延迟队列。由于队列是无限制的,因此该方法永远不会阻塞。

public void put(E e)

④take方法:检索并删除此队列的头部,必要时等待,直到此队列上有一个具有过期延迟的元素。

public E take() throws InterruptedException

⑤poll方法:检索并删除此队列的头部,或者null 如果此队列没有具有过期延迟的元素,则返回该队列。

public E poll()
public E poll(long timeout,TimeUnit unit) throws InterruptedException

⑥peek方法:检索但不移除此队列的头部,或者如果此队列为空则返回null。与poll不同 ,如果队列中没有可用的过期元素,则此方法将返回下一个将过期的元素(如果存在)。

public E peek()
5、LinkedTransferQueue类:

(1)基于链表的的无界TransferQueue。该队列针对任何给定的生产者对元素FIFO(先进先出)进行排序。队列的头部是队列中某个生产者最长时间的元素。队列的尾部是队列中对于某些生产者来说是最短的时间的元素。
(2)常用方法介绍:
①add方法:将指定元素插入此队列的尾部。

//由于队列是无限制的,因此该方法永远不会抛出 IllegalStateException或返回false。
public boolean add(E  e)

②offer方法:将指定元素插入此队列的尾部。

//由于队列是无限制的,因此该方法永远不会返回false。
public boolean offer(E e)
public boolean offer(E e,long timeout,TimeUnit unit)

③put方法:将指定元素插入此队列的尾部。由于队列是无限制的,因此该方法永远不会阻塞。

public void put(E e)

④peek方法:获取但不移除此队列的头部,或者如果此队列为空则返回null。

public E peek()

⑤poll方法:检索并删除此队列的头部,或者如果此队列为空则返回null。

public E poll()
public E poll(long timeout,TimeUnit unit) throws InterruptedException

⑥take方法:检索并删除此队列的头部,必要时等待,直到元素可用。

public E take() throws InterruptedException

⑦transfer方法:将元素传输给消费者,必要时等待。更确切地说,如果存在已经等待接收它的消费者(在take()或定时poll),则立即传送指定的元素 ,否则在该队列的尾部插入指定的元素并等待消费者接收该元素。

public void transfer(E e) throws InterruptedException
public boolean tryTransfer(E e,long timeout,TimeUnit unit)  throws InterruptedException
6、SynchronousQueue 类:

(1)一个阻塞队列,其中每个插入操作必须等待另一个线程执行相应的删除操作,反之亦然。同步队列没有任何内部容量,甚至没有容量。您不能 peek在同步队列中,因为只有在您尝试删除元素时才会出现该元素; 你不能插入一个元素(使用任何方法),除非另一个线程试图删除它; 你不能迭代,因为没有什么可以迭代。

//使用不公平的访问策略创建SynchronousQueue。
SynchronousQueue()
//使用指定的公平策略创建SynchronousQueue。
SynchronousQueue(boolean fair)

(2)常用方法介绍:
①offer方法:如果另一个线程正在等待接收它,则将指定的元素插入此队列, 并返回true,否则返回false

public boolean offer(E e)
public boolean offer(E e,long timeout,TimeUnit unit) throws InterruptedException

②put方法:将指定的元素添加到此队列,等待另一个线程接收它。

public void put(E e) throws InterruptedException

③take方法:检索并删除此队列的头部,等待另一个线程插入它。

public E take() throws InterruptedException

④poll方法:如果另一个线程当前正在使元素可用,则检索并移除此队列的头部

public E poll()
public E poll(long timeout,TimeUnit unit) throws InterruptedException

⑤peek方法:总是返回null。一个SynchronousQueue除非主动等待否则不返回元素。

public E peek()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值