BlockingQueue でキューを待ち受ける

BlockingQueue のインターフェースを利用すると、新たなキューが追加されるまで待ち受けることができる仕組みを実装することができるようになります。

BlockingQueue<Message> messages =
      new LinkedBlockingQueue<Message>();

キューへの追加は以下の様に記述します。

    public synchronized void sendMessage(List<String> recipients, String message) {
      try {
        messages.put(new Message(recipients, message));
      } catch (InterruptedException e) {
        //
      }
    }

待ち受ける際は poll メソッドで待ち受けます。

    while (running) {
        try {
          Message message = messages.poll(1000, TimeUnit.SECONDS);
          if (message != null) {
            // 処理
          }
          try {
            Thread.sleep(100);
          } catch (Throwable ignore) {
            //
          }
        } catch (Throwable t) {
          log(t.getMessage(), t);
          //
        }
      }