Java 関数での非同期処理に NIO を活用する: チャネル上のイベントをリッスンするようにセレクターを設定します。セレクターでモニターするチャンネルを登録します。セレクターをポーリングし、チャネル上のイベントを待ちます。イベント タイプ (接続、読み取り、書き込みなど) に応じて、チャネル上で発生する特定のイベントを処理します。
#NIO テクノロジを使用して Java 関数に非同期処理を実装する方法
概要
NIO (ノンブロッキング I/O、ノンブロッキング I/O) は、Java プログラムが呼び出しスレッドをブロックせずに I/O 操作を処理できるようにする非同期 I/O テクノロジです。このため、同時実行性の高いアプリケーションで高いパフォーマンスを実現するための重要な技術となります。NIO の基本概念
NIO の中心概念は次のとおりです:Java 関数での NIO の使用
NIO を使用して Java 関数で非同期処理を実装するには、次の手順に従います。1. セレクターを設定します
Selector selector = Selector.open();
##セレクターに監視するチャンネルを登録します:ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
select() メソッドを使用してセレクターをポーリングし、チャネル上のイベントを待ちます:
while (true) { selector.select(); Iterator<SelectionKey> keys = selector.selectedKeys().iterator(); while (keys.hasNext()) { SelectionKey key = keys.next(); keys.remove(); // 处理事件 } }
4. イベントの処理
接続の受け入れなど、チャネル上のイベントを処理します:if (key.isAcceptable()) {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel client = server.accept();
client.configureBlocking(false);
client.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
}
次はNIO を使用した実装 非同期処理用の単純な Java 関数: import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public class AsyncServer {
public static void main(String[] args) throws IOException {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
ServerSocket serverSocket = serverSocketChannel.socket();
serverSocketChannel.configureBlocking(false);
serverSocket.bind(new InetSocketAddress(9876));
while (true) {
SocketChannel client = serverSocketChannel.accept();
if (client != null) {
client.configureBlocking(false);
ByteBuffer buffer = ByteBuffer.allocate(1024);
client.read(buffer);
if (buffer.remaining() == 0) {
buffer.flip();
String message = new String(buffer.array(), 0, buffer.limit());
System.out.println("Received: " + message);
client.write(ByteBuffer.wrap(("Hello, " + message).getBytes()));
}
}
}
}
}
関数を実行するには、関数を Java ファイルとして保存し、次を使用してコンパイルして実行します。次のコマンド: javac AsyncServer.java
java AsyncServer
以上がNIO テクノロジーを使用して Java 関数に非同期処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。