Java线程队列

来源:互联网 发布:炫酷证书单页源码 编辑:程序博客网 时间:2024/05/29 11:18

1、BlockingQueue
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。
2、ArrayBlockingQueue
一个由数组支持的有界阻塞队列,规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的。
3、LinkedBlockingQueue
大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含的对象是以FIFO(先入先出)顺序排序的。
4、PriorityBlockingQueue
类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序。
5、SynchronousQueue
特殊的BlockingQueue,对其的操作必须是放和取交替完成的。
6、DelayQueue
DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素。DelayQueue是一个没有大小限制的队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,而只有获取数据的操作(消费者)才会被阻塞。DelayQueue使用场景较少,但都相当巧妙,常见的例子比如使用一个DelayQueue来管理一个超时未响应的连接队列。
7、LinkedTransferQueue
LinkedTransferQueue是一个由链表结构组成的无界传输阻塞队列。
8、CountDownLatch
CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。适用场景,只有三个程序都干完活了,才算项目完成。
9、AbstractQueuedSynchronizer
AbstractQueuedSynchronizer提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。
10、Semaphore
Semaphore是一个计数信号量。使用场景,就像排队进入博物馆一样,先放几个人进去,的部分这几个人走了,然后再放几个人进入,即排队机制。常见的实际应用场景包括线程池、连接池等。
11、CyclicBarrier
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点,然后所有的这个组线程再同步往后面执行。
12、LinkedBlockingDeque
LinkedBlockingDeque是一个由链表结构组成的双向阻塞队列。

0 0
原创粉丝点击