如何解决有条件的消费者怎么办?
我有多个任务生产者和消费者。消费者和任务可能会有所不同。单个消费者无法处理每种类型的任务。我不考虑为不同的任务类型创建多个队列,因为我无法区分某些类型,例如task1只能由ConsumerA处理,task2可以由CosnumerA和ConsumerB处理。
我想象的解决方案是有任务阻塞队列,有多个生产者将任务放入队列,还有多个消费者从队列中采取行动。消费者不能使用 BlockingQueue.take,因为消费者可能无法处理任务,并且任务必须返回到队列中导致问题。我想要带有 BlockingQueue.take 参数的 Predicate 方法。消费者只能接受该消费者可以处理的任务。消费者将使用 Predicate 来过滤任务。
public class Task
{
String name;
public void setName( String aName )
{
name = aName;
}
public String getName()
{
return name;
}
}
//it handles only tasks with name starting with A
public class AConsumer {
BlockingDeque<Task> queue;
public void process()
{
Task task=queue.take(t->t.getName().startsWith("A"));
//execute task
}
}
//it handles only tasks with name starting with B
public class BConsumer {
BlockingDeque<Task> queue;
public void process()
{
Task task=queue.take(t->t.getName().startsWith("B"));
//execute task
}
}
//it handles only tasks with name ending with Z
public class ZConsumer {
BlockingDeque<Task> queue;
public void process()
{
Task task=queue.take(t->t.getName().endsWith("Z"));
//execute task
}
}
我很惊讶在 Java 中找不到任何专用于满足我的要求的类。 Java 中是否有专用于我的场景的类?也许有一些图书馆?我更喜欢现成的解决方案,而不是实施我自己的解决方案。恐怕实施起来并不容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。