Ing wulangan iki, kita bakal kenal karo kelas Selector . Kelas iki ing paket java.nio.channels , supaya sampeyan ora perlu download utawa ngatur apa kanggo nggunakake. A obyek Selector bisa ngawasi siji utawa luwih obyek Channel , mriksa siap kanggo maca / nulis, etc.. Lan sing paling Jahwéh, pamilih perlu siji stream, ora siji stream saben saluran.

Kita nggawe pamilih nggunakake metode mbukak statis :

Selector selector = Selector.open();

Sawise iku, saluran bisa didaftar ing obyek pamilih:

SelectionKey key1 = channel1.register(selector, SelectionKey.OP_READ);
SelectionKey key2 = channel2.register(selector, SelectionKey.OP_WRITE);

Parameter kapindho cara register nemtokake operasi sing bakal dipantau dening pamilih. Yen sampeyan kudu ngawasi sawetara operasi bebarengan, sampeyan bisa nggunakake bitwise UTAWA:

SelectionKey.OP_READ | SelectionKey.OP_WRITE

Nalika tumindak I/O ana ing saluran apa wae, pamilih bakal menehi kabar marang kita. Kanthi cara iki sampeyan bisa, contone, maca data saka nomer akeh sumber data.

Ing kene kita kudu nyebutake manawa saluran kudu ana ing mode non-blocking supaya bisa digunakake karo pamilih:

channel1.configureBlocking(false);
channel2.configureBlocking(false);
SelectionKey key1 = channel1.register(selector, SelectionKey.OP_READ);
SelectionKey key2 = channel2.register(selector, SelectionKey.OP_WRITE);

Iku nderek yen pamilih ora bakal bisa karo FileChannel , amarga FileChannel ora bisa dialihake menyang mode non-blocking ( cara configureBlocking diumumake ing SelectableChannel kelas, kang FileChannel ora warisan).

Saka diagram, sampeyan bisa ndeleng manawa pamilih cocok kanggo nggunakake soket. Kita bakal nggarap dheweke ing pungkasan modul kapindho.

Tombol Pilihan

Nalika ndhaptar saluran karo pamilih, kita njaluk aTombol Pilihanobyek. Objek iki ngemot data babagan registrasi saluran.

Sampeyan bisa nggunakake tombol kanggo nemtokake manawa saluran wis siyap kanggo nilai tartamtu:

key.isReadable()
key.isAcceptable()
key.isConnectable()
key.isWritable()

Tombol kasebut bisa menehi saluran lan pamilih sing cocog:

Channel channel = key.channel();
Selector selector = key.selector();

Sampeyan bisa masang obyek apa wae menyang kunci supaya bisa dilacak ing mangsa ngarep. Iki bisa ditindakake sajrone registrasi saluran (liwat argumen katelu) utawa mengko:

  1. Tombol SelectionKey = channel.register(selektor, SelectionKey.OP_ACCEPT, obyek);

  2. key.attach(obyek);

Mengko, sampeyan bisa njaluk obyek sing ditempelake saka tombol:

Object object = key.attachment();

Kesimpulan

Sawise ndhaptar saluran kanthi pamilih, kita bisa:

  • temokake jumlah saluran sing siap kanggo nindakake operasi tartamtu
  • mblokir eksekusi program kita nganti paling ora siji saluran siap
  • entuk set tombol kanggo saluran siap
  • lan liyane

Ing pungkasan modul kapindho, kita bakal nyoba pamilih ing laku.