У меня есть несколько очередей BlockingQueue, содержащих сообщения для отправки. Возможно ли иметь меньше потребителей, чем очередей? Я не хочу зацикливаться на очередях и продолжать их опрашивать (занятое ожидание), и мне не нужен поток для каждой очереди. Вместо этого я хотел бы иметь один поток, который пробуждается, когда сообщение доступно в любой из очередей.
Это может быть решено с помощью полиморфизма, предположить, что у Вас есть два задания, названные JobOne
и JobTwo
, и Вы собираетесь использовать их потребителем. Необходимо определить интерфейс, названный заданиями как:
interface Jobs {
...
}
И затем можно реализовать Вас задания этим интерфейсом как:
class JobOne implements Job {
...
}
class JobTwo implements Job {
...
}
Теперь можно использовать Jobs
, чтобы блокирующаяся очередь добавила два вида заданий для потребления.
BlockingQueue<Jobs> Jobs queue = new BlockingQueue<Jobs>();