利用 LinkedBlockingQueue 实现一个阻塞限制队列 LimitQueue
需求
多线程执行任务时, 如果在线程队列中,如果满了,则等待线程池中的任务完成之后,再放入任务. 而不是抛出异常或抛弃其他任务.
实现
import javax.validation.constraints.NotNull;
import java.util.concurrent.LinkedBlockingQueue;
/**
* 当线程池满了的时候,线程池阻塞队列, 而不是抛出异常或抛弃其他任务.
*
* @author Chris
* @version 1.0.0
* @date 2020/06/21
*/
public class LimitedQueue<E> extends LinkedBlockingQueue<E> {
private static final long serialVersionUID = -5748798311137647565L;
public LimitedQueue(int maxSize) {
super(maxSize);
}
/** 实现如果线程池满了将阻塞队列 */
@Override
public boolean offer(@NotNull E e) {
// return super.offer(e);
// turn offer() and add() into a blocking calls (unless interrupted)
try {
put(e);
return true;

本文介绍了一种利用LinkedBlockingQueue实现的限流阻塞队列LimitedQueue,该队列在达到最大容量时不会抛出异常而是阻塞新的任务加入,直至队列中有空间可用。适用于多线程环境中对任务进行限制,防止资源过载。
8183

被折叠的 条评论
为什么被折叠?



