JavaのDelayQueueの使用方法は?

DelayQueueはJavaで使われる無限のブロッキングキューで、Delayedインターフェースを実装しており、要素は指定された時間の遅れ後に取り出されます。DelayQueueを使う手順は以下の通りです:

  1. DelayQueueオブジェクトを作成します。
  2. 遅延キュー(DelayQueue)には、DelayedElementオブジェクトを格納する遅延キュー変数delayQueueがあります。
  3. Delayedインターフェースを実装するDelayedElement要素クラスを作成します。
  4. public class DelayedElement implements Delayed {
    private long delayTime; // 延迟時間
    private long expireTime; // 到期時間
    private String data; // データ// コンストラクタ
    public DelayedElement(long delayTime, String data) {
    this.delayTime = delayTime;
    this.expireTime = System.currentTimeMillis() + delayTime;
    this.data = data;
    }

    // 残りの遅延時間を取得
    @Override
    public long getDelay(TimeUnit unit) {
    return unit.convert(expireTime – System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }

    // キュー要素のソート規則
    @Override
    public int compareTo(Delayed o) {
    if (this.expireTime < ((DelayedElement) o).expireTime) { return -1; } else if (this.expireTime > ((DelayedElement) o).expireTime) {
    return 1;
    } else {
    return 0;
    }
    }

    // 要素が期限切れかどうか
    public boolean isExpired() {
    return System.currentTimeMillis() >= expireTime;
    }

    // データを取得
    public String getData() {
    return data;
    }
    }

  5. DelayQueueに要素を追加します。
  6. delayQueue.offer(new DelayedElement(1000, “要素 1”)); // 1秒の遅延
    delayQueue.offer(new DelayedElement(2000, “要素 2”)); // 2秒の遅延
  7. DelayQueueから期限切れの要素を取り出す:
  8. delayQueueから要素を取り出して、DelayedElement delayedElementに代入し、そのデータをString型の変数dataに代入します。

重要なことは、take()メソッドはブロッキングメソッドであり、キューに要素がない場合は要素が到着するまで常にブロックされます。ブロックをせずに期限切れの要素を取得したい場合は、poll()メソッドを使用できます。

DelayedElementクラスのcompareTo()メソッドを書き直すことで、要素の並べ替えルールを指定し、どの要素が先に取り出されるかを決定することができます。前述の例では、要素の並べ替えルールは有効期限の順番に従って並べ替えられます。

bannerAds