import java.util.concurrent.LinkedBlockingQueue;
public class MyCustomQueue {
private LinkedBlockingQueue<Element> queue = new LinkedBlockingQueue<>();
public void addElement(Element element) {
synchronized (queue) {
for (Element e : queue) {
if (e.getId() == element.getId()) {
queue.remove(e); // 移除已存在的元素
break;
}
}
queue.add(element); // 添加新元素
}
}
public void startConsumers(int numConsumers) {
for (int i = 0; i < numConsumers; i++) {
new Thread(() -> {
while (true) {
try {
Element element = queue.take();
consumeElement(element);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}).start();
}
}
private void consumeElement(Element element) {
// 消费元素的代码,根据实际需求自行实现
System.out.println("Consumed element with ID: " + element.getId());
}
}
class Element {
private int id;
public Element(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
堵塞队列去重并发消费
最新推荐文章于 2024-05-06 07:08:30 发布
本文介绍了如何使用Java的LinkedBlockingQueue实现一个定制的并发队列,包括添加元素的方法、启动消费者线程以及消费元素的逻辑,展示了在多线程环境下管理元素的基本原理。
1057

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



