听取没有消费者理想的java队列

时间:2015-05-23 16:22:08

标签: java multithreading concurrency

我必须实现有效的方式来监听java队列,如果队列中有任何消息,那么资源永远不应该是理想的。

例如: 我有队列“MessageQueue”并且有3个消费者正在侦听队列,如果队列有5个消息,那么所有3个消费者应该选择3个消息,如果任何消费者完成第一个消息消费,它应该采取另一个消息没有延迟等等..

此外,我还必须实现优先级排序,具体取决于消息类型。

public class Message {

    private int id;
    private String message;
    private String type;

    public Message(int id, String message, String type) {
        this.id = id;
        this.message = message;
        this.type = type;
    }
    // all getter setters & toString method
    ....
}

消费者:

 public class Consumer implements Runnable {

    private final Queue<Message> queue;

    public Consumer(Queue<Message> queue) {
        this.queue = queue;
    }

    @Override
    public void run() {
        while (true) {
            try {
                consume();
            } catch (InterruptedException ex) {
                Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    private void consume() {
        while (!queue.isEmpty()) {
            Message m = queue.poll();
            if (m != null) {
                System.out.println("Consumer: " + m.toString());
            }
        }
    }
}
  1. 如果队列中有消息,我应该如何确保没有消费者不理想?

  2. 我应该如何将多个消费者分配到队列并一次启动它们?

  3. 我应该如何按类型确定消息的优先级。 假设只有一个消费者,C1得到了A类消息,如果A类队列中有另一条消息,则应先行。

0 个答案:

没有答案