<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 16,comments - 17,trackbacks - 0
    在JDK1.4.2中加入了對NIO的支持,掌握其中的Selector個人認為是能實現好NIO的關鍵。

    Selector是用來獲取注冊在其中的channel的相關事件的發生,也就是accept,read和write。selector中有3個key set。

    key set:包含代表所有在其中注冊的channel,可以通過selector.keys()得到。
    selected-key set:包含所有被檢測到有關注的操作已經就緒的key,通過selector.selectedKeys得到。
    cancelled-key set:包含所有已經被cancel,但是還沒有channel還沒有deregister的key,這個集合是不能直接被訪問的。

    key通過調用channel的register方法被加入到key set中。被取消的key在select的時候會被從相應的key set中移除。

    key set自身是不可以直接進行修改的。 無論是通過調用channel的close方法還是調用key的cancel方法,key都會被放置到canceled-key set中。取消的key會將其channel在下一次select時將注冊撤銷,同時將key從所有的key set中移除。

    key在執行select操作時被加入到selected-key set中。在selected-key set中的key可以通過調用iterator的remove方法,將其從selected-key set中移除,不能通過其他的辦法將其從selected-key set中移除。

    通過selector的3個方法select(阻塞選擇,直到有關心的事件發生時退出阻塞),selectNow(不阻塞選擇),select(long)(指定超時選擇,超時到達或者有關心事件發生時退出阻塞),來獲取關心事件的發生。其執行步驟分為以下3步:

    1、將存在于canceled-key set中的key從所有的key set中移除,撤銷注冊的channel,清空canceled-key set。
    2、地層操作系統檢查是否有關心的事件發生,當有關心的事件發生時,首先檢查channel的key是否已經存在于selected-key set中,如果不存在,則將其加入到selected-key set中去,同時修改key的ready-operation set來表明當前ready的操作,而以前存在于ready-operation set中的信息會被刪除。如果對應的key已經存在于selected-key set中,這直接修改其ready-operation set來表明當前ready的操作,刪除原來ready-operation set中的信息。
    3、如果在第二步中有加入到canceled-key set中的key,在這一步會執行第一步的操作。

    selector自身是線程安全的,而他的key set卻不是。在一次選擇發生的過程中,對于key的關心事件的修改要等到下一次select的時候才會生效。 另外,key和其代表的channel有可能在任何時候被cancel和close。因此存在于key set中的key并不代表其key是有效的,也不代表其channel是open的。如果key有可能被其他的線程取消或關閉channel,程序必須小 心的同步檢查這些條件。

    阻塞了的select可以通過調用selector的wakeup方法來喚醒。
    posted on 2005-04-26 10:06 非飛 閱讀(17393) 評論(3)  編輯  收藏 所屬分類: JAVA 相關技術

    FeedBack:
    # re: NIO中Selector的工作原理
    2005-04-29 15:50 | idior
    # re: NIO中Selector的工作原理
    2005-12-26 15:40 | zhangwei
    selector.selectedKeys返回是Set(應該是集合的意思吧)但為什么返回值是int型匿?jdk上說A selection key contains two operation sets represented as integer values. Each bit of an operation set denotes a category of selectable operations that are supported by the key's channel.它意思是說一個整數(8bit)的每一個bit代表一個操作么?  回復  更多評論
      
    # re: NIO中Selector的工作原理
    2005-12-26 22:19 | zhangwei
    sorry, 我說的是SelectionKey.interestOps  回復  更多評論
      
    主站蜘蛛池模板: a国产成人免费视频| 在线观看免费中文视频| 国产亚洲精品资在线| 免费网站看av片| 2022年亚洲午夜一区二区福利| 18成禁人视频免费网站| 亚洲人成网站999久久久综合| 日韩免费视频在线观看| 亚洲第一街区偷拍街拍| 国产亚洲精品成人AA片新蒲金| 91成人免费福利网站在线| 亚洲国产一区二区a毛片| 日韩免费视频一区| 光棍天堂免费手机观看在线观看| 狠狠色伊人亚洲综合成人| 搡女人免费视频大全| 黄色a三级免费看| 亚洲精品午夜国产VA久久成人| 野花高清在线电影观看免费视频 | 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲AV成人潮喷综合网| 91福利免费视频| 一级A毛片免费观看久久精品 | 亚洲国产精品13p| 国产v精品成人免费视频400条| 国产免费播放一区二区| 久久夜色精品国产噜噜亚洲a| 亚洲精品卡2卡3卡4卡5卡区| 毛片a级三毛片免费播放| 国产免费一区二区三区在线观看| 亚洲1区2区3区精华液| 亚洲精品中文字幕无乱码| 国产亚洲情侣一区二区无码AV| 四虎www免费人成| 91高清免费国产自产拍2021| 特级毛片全部免费播放a一级| 中文字幕乱码亚洲精品一区| 在线电影你懂的亚洲| 国产亚洲成av片在线观看| 亚洲成av人片一区二区三区| 免费av欧美国产在钱|