元素唯一的LinkedBlockingQueue阻塞队列

2 篇文章 0 订阅

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

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

代码如下:

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

/**
 * <pre>
 * UniqueLinkedBlockingQueue.java
 * @author kanpiaoxue<br>
 * @version 1.0
 * Create Time 2014年8月7日 下午1:32:31<br>
 * Description : 元素唯一的LinkedBlockingQueue阻塞队列
 * </pre>
 */
public class UniqueLinkedBlockingQueue<E> extends LinkedBlockingQueue<E> {

    private static final long serialVersionUID = 6523405086129214113L;
    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();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值