Java Nio中Selector是什麼?Selector怎麼使用呢?

大傢好,我是小北。以前大傢都是用阻塞式IO來對網絡IO進行數據請求,對於不同的IO都要分配一個線程來處理,如果沒有數據就會進行等待,從而造成瞭阻塞,這種方式極大地浪費瞭資源(如圖1)。於是,有人就提出瞭一個想法,使用一個線程去監控多個IO請求,如果哪一個IO數據準備完畢後就通知相應的線程來處理,這就是selector模型(如圖2)。而Java中的selector就是對selector模型的一種實現,用於詢問選擇已就緒的IO處理任務。

Selector的幾個核心的概念

  1. Channel(通道):用於進行網絡傳輸的通道,網絡傳輸的數據都放在通道中,可以進行寫入,也可以進行讀取。Channel主要有兩種:ServerSocketChannel和SocketChannel,其中ServerSocketChannel是用於服務端開發的,而SocketChannel是用於客戶端開發的。
  2. Selector(選擇器):用於進行監控多個通道數據狀態。
  3. SelectableChannel(可選擇通道):可以被選擇器選擇的通道,繼承瞭抽象類SelectableChannel的Channel,而FileChannel沒有繼承此類,所以不可以被選擇器選擇。
  4. SelectionKey(選擇鍵):用於表示通道可以被選擇的某種就緒事件狀態。選擇鍵的事件主要有以下幾種: OP_READ:可讀事件。 ​ OP_WRITE:可寫事件。 ​ OP_CONNECT:客戶端連接服務端的事件,一般為創建SocketChannel客戶端channel。 ​ OP_ACCEPT:服務端接收客戶端連接的事件,一般為創建ServerSocketChannel服務端channel。

Selector的使用

1.創建選擇器

Selector selector = Selector.open();

发表回复

相关推荐

小米OPPO三星一加红魔全机型解锁BL详细教程合集-ROOT刷机必要操作

解锁BL一个熟悉又陌生的词汇,只要你刷机root过,你肯定都解锁BL成功过。我们简单的描

· 31秒前

教你在家做生煎饺,外皮酥脆,底部结冰,又酥又香真好吃!

  冰花生煎饺是一道非常普通的家常菜谱,饺子特点皮薄馅大,有一层像冰花的脆脆的底非常好吃,制作也很简单,只要你会包饺 ...

· 2分钟前

家用NAS开源方案

关于家庭NAS NAS就是有一台家用主机,也可以使一台家用电脑,但是这台电脑的存储空间特别大,比如买电脑时选择硬盘空间大的 ...

· 6分钟前

2024年高中必刷题(九科人教版必修一)大合集-可打印pdf

2024年恐成“高考难年”,3大改变要关注,部分学生或无缘本科:教育政策并不是一成不变的,而是随着时代的发展不断的改革和调 ...

· 6分钟前

五凉古都,这样的武威你了解吗?

武威地处甘肃河西走廊的东端, 东邻兰州,西通金昌, 南依祁连山,北接腾格里沙漠。 武威在历史上不仅是古丝绸之路上的重镇 ...

· 8分钟前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.