元素唯一的LinkedBlockingQueue阻塞队列

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

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

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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();
}
}
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2021 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :