元素唯一的LinkedBlockingQueue阻塞队列

这是一个简单的阻塞队列,它继承了JDK原有的LinkedBlockingQueue,也是线程安全的。与LinkedBlockingQueue不同的地方在于,UniqueLinkedBlockingQueue队列里面不允许出现重复性元素。该队列可以在很多场景中适用,比如:

多生产者的情形下,一起向队列中存放任务,这些任务不允许在队列里面出现重复,就可以使用这个队列。

代码如下:

import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 元素唯一的LinkedBlockingQueue阻塞队列
 */
public class UniqueLinkedBlockingQueue<E> extends LinkedBlockingQueue<E> {

    private static final long serialVersionUID = 6523805086129218113L;
    private final ReentrantLock putLock = new ReentrantLock();

    public void put(E e) throws InterruptedException {
        putLock.lock();
        try {
            if (!contains(e)) {
                super.put(e);
            }
        } finally {
            putLock.unlock();
        }
    }
}
上一篇 Confluence https配置
下一篇 阻塞队列之LinkedBlockingQueue
目录
文章列表
1 JS跳转页面实现方式
JS跳转页面实现方式
2
Android Jetpack架构组件(四)CameraX基本功能
Android Jetpack架构组件(四)CameraX基本功能
3
Java队列Queue详细分析
Java队列Queue详细分析
4
Android照片获取框架TakePhoto使用流程
Android照片获取框架TakePhoto使用流程
5
ViewPager使用FragmentPagerAdapter滑动Fragment动态加载Atlas bundle不显示问题
ViewPager使用FragmentPagerAdapter滑动Fragment动态加载Atlas bundle不显示问题
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。