BlockingQueue

繁华事散逐香尘,流水无情草自春。——杜牧《金谷园》

JDK7提供了7个阻塞队列。(也属于并发容器)
1.ArrayBlockingQueue一个由数组结构组成的有界阻塞队列FIFO。(一个 ReentrantLock lock;)
2.LinkedBlockingQueue一个由链表结构组成的任意大小的线程安全的阻塞队列FIFO(为生产者消费者的首选。)(锁分离,两个锁takeLock、putLock)
3.PriorityBlockingQueue一个支持优先级排序的无界阻塞队列按优先级出队(小堆实现)
4.DelayQueue一个无界阻塞队列,只有在延迟期满时才能从中提取元素。
5.SynchronousQueue一个不存储元素的阻塞队列。
6.LinkedTransferQueue一个由链表结构组成的无界阻塞队列。
7.LinkedBlockingDeque一个由链表结构组成的双向阻塞队列。
线程池实例
FixedThreadPool被称为可重用固定线程数的线程池FixedThreadPool 使用无界队列LinkedBlockingQueue 作为线程池的工作队列( 队列的容量为Integer.MAX_VALUE)。FixedThreadPool适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场合,适用于负载比较重的服务器。
SingleThreadExecutor是使用单个worker线程的Executor。SingleThreadExecutor 使用无界队列LinkedBlockingQueue 作为线程池的工作队列( 队列的容量为Integer.MAX_VALUE)。SingleThreadExecutor适用于需要保证顺序地执行各个任务;并且在任意时间点,不会有多个线程是活动的应用场景。
CachedThreadPool是一个会根据需要创建新线程的线程池。CachedThreadPool使用没有容量的SynchronousQueue作为线程池的工作队列,但CachedThreadPool的maximumPool是无界的。这意味着,如果主线程提交任务的速度高于maximumPool中线程处理任务的速度时,CachedThreadPool会不断创建新线程。极端情况下,CachedThreadPool会因为创建过多线程而耗尽CPU和内存资源。CachedThreadPool是大小无界的线程池,适用于执行很多的短期异步任务的小程序,或者负载较轻的服务器。
ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来在给定的延迟之后运行任务,或者定期执行任务。线程池中的线程从DelayQueue中获取ScheduledFutureTask,然后执行任务。周期性或者延时任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值