<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
    @ My Space
    posted @ 2005-05-13 00:08 非飛 閱讀(2464) | 評論 (2)編輯 收藏
    @ My space
    posted @ 2005-05-07 00:19 非飛 閱讀(2228) | 評論 (0)編輯 收藏
    在JDK1.4.2中加入了對NIO的支持,掌握其中的Selector個(gè)人認(rèn)為是能實(shí)現(xiàn)好NIO的關(guān)鍵。

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

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

    key通過調(diào)用channel的register方法被加入到key set中。被取消的key在select的時(shí)候會(huì)被從相應(yīng)的key set中移除。

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

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

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

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

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

    阻塞了的select可以通過調(diào)用selector的wakeup方法來喚醒。
    posted @ 2005-04-26 10:06 非飛 閱讀(17393) | 評論 (3)編輯 收藏
    主站蜘蛛池模板: 国产亚洲婷婷香蕉久久精品| 亚洲va在线va天堂va不卡下载| 午夜成人无码福利免费视频| 亚洲综合另类小说色区| 18禁成人网站免费观看| 亚洲精品无AMM毛片| 亚洲一区二区视频在线观看| 57pao一国产成永久免费| 亚洲国产精品自在自线观看| 亚洲乱码中文字幕综合| 免费精品国偷自产在线在线| 免费人成在线观看播放a| 亚洲国产精品线在线观看| 国产精品va无码免费麻豆| 免费国产叼嘿视频大全网站| 亚洲人成网国产最新在线| 自拍偷自拍亚洲精品被多人伦好爽| 久草免费在线观看视频| 人成电影网在线观看免费| 亚洲成aⅴ人在线观看| 亚洲成人国产精品| 69成人免费视频| 久久久久久噜噜精品免费直播| 亚洲午夜电影在线观看高清| 久久精品亚洲乱码伦伦中文| 日韩亚洲国产高清免费视频| 韩国免费a级作爱片无码| 亚洲精品无码mⅴ在线观看| 亚洲AV人无码综合在线观看| 成人免费a级毛片| 久久国产乱子精品免费女| 国产精品亚洲一区二区三区久久 | 中文字幕免费观看| 鲁啊鲁在线视频免费播放| 亚洲日本国产乱码va在线观看| 国产亚洲色视频在线| 国产一级淫片免费播放电影| 在线观看成人免费视频不卡| 日韩电影免费观看| 色吊丝性永久免费看码| 亚洲成av人无码亚洲成av人|