【无标题】

标题线程池工作队列 && 电商项目中的线程池工作队列选择

四种
arrayblokingqueue
ArrayBlockingQueue 有界队列
此队列对元素进行 FIFO(先进先出)排序
LinkedBlockingDeque 无界队列

SynchronousQueue 没有容量的队列
队列有个特点 就是不允许有空元素在队列中
ArrayBlockingQueue:ArrayBlockingQueue(有界队列)是一个用数组实现的有界阻塞队列,按FIFO排序量。
LinkedBlockingQueue:LinkedBlockingQueue(可设置容量队列)是基于链表结构的阻塞队列,按FIFO排序任务,容量可以选择进行设置,不设置的话,将是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE,吞吐量通常要高于ArrayBlockingQuene;newFixedThreadPool线程池使用了这个队列
DelayQueue:DelayQueue(延迟队列)是一个任务定时周期的延迟执行的队列。根据指定的执行时间从小到大排序,否则根据插入到队列的先后排序。newScheduledThreadPool线程池使用了这个队列。
PriorityBlockingQueue:PriorityBlockingQueue(优先级队列)是具有优先级的无界阻塞队列
SynchronousQueue:SynchronousQueue(同步队列)是一个不存储元素的阻塞队列,每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于LinkedBlockingQuene,newCachedThreadPool线程池使用了这个队列。

对于电商项目中的线程池工作队列选择,我推荐使用无界队列 (unbounded queue)。无界队列可以无限制地接受新的任务,避免任务因为队列满而被拒绝,确保所有任务都得到处理。同时,无界队列还可以对任务进行排队,保证任务按照提交的顺序依次执行。这对于电商项目来说尤为重要,因为可能会有大量的并发请求需要处理,而无界队列可以更好地应对高并发的情况。当然,在选择无界队列时,还需要根据具体的项目需求和系统资源来调整线程池的参数,如核心线程数、最大线程数等。

LinkedBlockingQueue 是 Java 中的一个阻塞队列,它具有以下特性:

优点:

  1. 队列容量无限:LinkedBlockingQueue 是一个无界队列,可以存放任意数量的元素,因此可以一直添加元素,直到系统的资源耗尽。
  2. 线程安全:LinkedBlockingQueue 内部使用了锁来实现线程安全的操作,保证多个线程可以同时进行入队和出队操作而不会发生数据冲突。
  3. 高性能:LinkedBlockingQueue 在入队和出队操作时,使用了不同的锁分离策略,使得不同的线程可以同时进行不同的操作,提高了队列的并发性能。

缺点:

  1. 内存占用:由于是无界队列,如果任务提交速度过快且无法及时处理,可能会导致队列的长度越来越长,最终占用大量的内存资源。
  2. 无法限制队列长度:无界队列很灵活,但也可能导致问题,例如当系统负载高时,无界队列可能会导致任务积压,增加系统的响应时间。

综上所述,LinkedBlockingQueue 适用于对队列容量无限制的场景,同时需要保证线程安全和高性能。但需要注意的是,在使用无界队列时需要根据系统资源和负载情况进行评估和调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值