JavaにおけるNIOによる非ブロッキングキューの実装

Java NIOではセレクターとチャネルを使用して非ブロッキングキューを実現できます。

まず、Selectorオブジェクトを作成します。

Selector selector = Selector.open();

そして、SelectorにChannelを登録し、興味のあるイベント(ReadやWriteなど)を指定する:

channel.register(selector, SelectionKey.OP_READ);

次に、イベント発生やタイムアウトまで待機する、Selectorのselect()メソッドがループで呼び出されます。

int readyChannels = selector.select();

その後、selectedKeys()メソッドで、選択済みのSelectionKeyのコレクションを取得します。

Set<SelectionKey> selectedKeys = selector.selectedKeys();

selectedKeysを走査して、データの読み込みや書き込みなどの準備ができた各SelectionKeyを処理する。

for (SelectionKey key : selectedKeys) {
    if (key.isReadable()) {
        // 处理读事件
    }
    if (key.isWritable()) {
        // 处理写事件
    }
}

最後に、処理が完了した後は、SelectionKeyを集合から削除する。

selectedKeys.clear();

上記のステップを実行することで非ブロックキューが実現します。この非ブロックキューは、準備が整ったイベントを処理するためにselect()メソッドをループの中で呼び出す必要があります。

bannerAds