Rumah > Java > javaTutorial > teks badan

Bagaimana untuk menggunakan teknologi NIO untuk melaksanakan pemprosesan tak segerak dalam fungsi Java?

WBOY
Lepaskan: 2024-05-04 21:27:02
asal
890 orang telah melayarinya

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.).

如何利用 NIO 技术在 Java 函数中实现异步处理?

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:

  • Pemilih (Pemilih): Dengar acara pada berbilang saluran (seperti soket).
  • Saluran: Operasi I/O abstrak, seperti membaca dan menulis.
  • Buffer (Buffer): Menyimpan data untuk berinteraksi dengan saluran.

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();
Salin selepas log masuk

3 Tinjauan pemilih

Gunakan kaedah

untuk mengundi pemilih dan tunggu acara di saluran:

ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
Salin selepas log masuk

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();

    // 处理事件
  }
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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()));
        }
      }
    }
  }
}
Salin selepas log masuk

Fungsi ini akan memulakan pelayan tak segerak pada port 9876. Anda boleh menggunakan Telnet atau alat rangkaian lain untuk menyambung ke pelayan dan menghantar mesej.

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan