Manfaatkan NIO untuk pemprosesan tak segerak dalam fungsi Java: Sediakan pemilih untuk mendengar acara pada saluran. Daftar saluran untuk dipantau dengan pemilih. Tinjau pemilih, menunggu acara di saluran. Mengendalikan peristiwa tertentu yang berlaku pada saluran mengikut jenis acara (seperti sambungan, baca dan tulis, dsb.).
Cara menggunakan teknologi NIO untuk melaksanakan pemprosesan tak segerak dalam fungsi Java
Pengenalan
NIO (I/O Tidak Menghalang, teknologi I/O yang tidak menyekat) membenarkan program Java mengendalikan operasi I/O tanpa menyekat benang panggilan. Ini menjadikannya teknik penting untuk mencapai prestasi tinggi dalam aplikasi serentak.
Konsep asas NIO
Konsep teras NIO ialah:
using NIO dalam fungsi Java
Mengata NIO untuk melaksanakan pemprosesan asynchronous dalam fungsi Java, sila ikuti langkah -langkah ini:
1. saluran yang akan dipantau kepada pemilih:
Selector selector = Selector.open();
3 Tinjauan pemilih
Gunakan kaedahuntuk mengundi pemilih dan tunggu acara di saluran:
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.configureBlocking(false); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
sedang diproses.4 acara saluran, seperti menerima sambungan:
while (true) { selector.select(); Iterator<SelectionKey> keys = selector.selectedKeys().iterator(); while (keys.hasNext()) { SelectionKey key = keys.next(); keys.remove(); // 处理事件 } }
select()
Kes praktikal
Berikut ialah fungsi Java mudah yang menggunakan NIO untuk melaksanakan pemprosesan tak segerak:
if (key.isAcceptable()) { ServerSocketChannel server = (ServerSocketChannel) key.channel(); SocketChannel client = server.accept(); client.configureBlocking(false); client.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE); }
Jalankan fungsi
Untuk menjalankan fungsi, simpannya sebagai fail Java dan susun serta jalankannya menggunakan arahan berikut:
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())); } } } } }
Atas ialah kandungan terperinci Bagaimana untuk menggunakan teknologi NIO untuk melaksanakan pemprosesan tak segerak dalam fungsi Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!