亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? selectormanager.java

?? 著名服務器nio的源碼
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package org.mortbay.io.nio;import java.io.IOException;import java.nio.channels.CancelledKeyException;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.mortbay.component.AbstractLifeCycle;import org.mortbay.io.Connection;import org.mortbay.io.EndPoint;import org.mortbay.log.Log;import org.mortbay.thread.Timeout;/* ------------------------------------------------------------ *//** * The Selector Manager manages and number of SelectSets to allow * NIO scheduling to scale to large numbers of connections. *  * @author gregw * */public abstract class SelectorManager extends AbstractLifeCycle{    private boolean _delaySelectKeyUpdate=true;    private long _maxIdleTime;    private long _lowResourcesConnections;    private long _lowResourcesMaxIdleTime;    private transient SelectSet[] _selectSet;    private int _selectSets=1;    private volatile int _set;        /* ------------------------------------------------------------ */    /**     * @param maxIdleTime The maximum period in milli seconds that a connection may be idle before it is closed.     * @see {@link #setLowResourcesMaxIdleTime(long)}     */    public void setMaxIdleTime(long maxIdleTime)    {        _maxIdleTime=maxIdleTime;    }        /* ------------------------------------------------------------ */    /**     * @param selectSets     */    public void setSelectSets(int selectSets)    {        long lrc = _lowResourcesConnections * _selectSets;         _selectSets=selectSets;        _lowResourcesConnections=lrc/_selectSets;    }        /* ------------------------------------------------------------ */    /**     * @return     */    public long getMaxIdleTime()    {        return _maxIdleTime;    }        /* ------------------------------------------------------------ */    /**     * @return     */    public int getSelectSets()    {        return _selectSets;    }        /* ------------------------------------------------------------ */    /**     * @return     */    public boolean isDelaySelectKeyUpdate()    {        return _delaySelectKeyUpdate;    }    /* ------------------------------------------------------------ */    /** Register a channel     * @param channel     * @param att Attached Object     * @throws IOException     */    public void register(SocketChannel channel, Object att) throws IOException    {        int s=_set++;         s=s%_selectSets;        SelectSet set=_selectSet[s];        set.addChange(channel,att);        set.wakeup();    }        /* ------------------------------------------------------------ */    /** Register a serverchannel     * @param acceptChannel     * @return     * @throws IOException     */    public void register(ServerSocketChannel acceptChannel) throws IOException    {        int s=_set++;         s=s%_selectSets;        SelectSet set=_selectSet[s];        set.addChange(acceptChannel);        set.wakeup();    }    /* ------------------------------------------------------------ */    /**     * @return the lowResourcesConnections     */    public long getLowResourcesConnections()    {        return _lowResourcesConnections*_selectSets;    }    /* ------------------------------------------------------------ */    /**     * Set the number of connections, which if exceeded places this manager in low resources state.     * This is not an exact measure as the connection count is averaged over the select sets.     * @param lowResourcesConnections the number of connections     * @see {@link #setLowResourcesMaxIdleTime(long)}     */    public void setLowResourcesConnections(long lowResourcesConnections)    {        _lowResourcesConnections=(lowResourcesConnections+_selectSets-1)/_selectSets;    }    /* ------------------------------------------------------------ */    /**     * @return the lowResourcesMaxIdleTime     */    public long getLowResourcesMaxIdleTime()    {        return _lowResourcesMaxIdleTime;    }    /* ------------------------------------------------------------ */    /**     * @param lowResourcesMaxIdleTime the period in ms that a connection is allowed to be idle when this SelectSet has more connections than {@link #getLowResourcesConnections()}     * @see {@link #setMaxIdleTime(long)}     */    public void setLowResourcesMaxIdleTime(long lowResourcesMaxIdleTime)    {        _lowResourcesMaxIdleTime=lowResourcesMaxIdleTime;    }        /* ------------------------------------------------------------ */    /**     * @param acceptorID     * @throws IOException     */    public void doSelect(int acceptorID) throws IOException    {        SelectSet[] sets= _selectSet;        if (sets!=null && sets.length>acceptorID && sets[acceptorID]!=null)            sets[acceptorID].doSelect();    }    /* ------------------------------------------------------------ */    /**     * @param delaySelectKeyUpdate     */    public void setDelaySelectKeyUpdate(boolean delaySelectKeyUpdate)    {        _delaySelectKeyUpdate=delaySelectKeyUpdate;    }    /* ------------------------------------------------------------ */    /**     * @param key     * @return     * @throws IOException      */    protected abstract SocketChannel acceptChannel(SelectionKey key) throws IOException;    /* ------------------------------------------------------------------------------- */    public abstract boolean dispatch(Runnable task) throws IOException;    /* ------------------------------------------------------------ */    /* (non-Javadoc)     * @see org.mortbay.component.AbstractLifeCycle#doStart()     */    protected void doStart() throws Exception    {        _selectSet = new SelectSet[_selectSets];        for (int i=0;i<_selectSet.length;i++)            _selectSet[i]= new SelectSet(i);        super.doStart();    }    /* ------------------------------------------------------------------------------- */    protected void doStop() throws Exception    {        SelectSet[] sets= _selectSet;        _selectSet=null;        if (sets!=null)            for (int i=0;i<sets.length;i++)                sets[i].stop();        super.doStop();    }    /* ------------------------------------------------------------ */    /**     * @param endpoint     */    protected abstract void endPointClosed(SelectChannelEndPoint endpoint);    /* ------------------------------------------------------------ */    /**     * @param endpoint     */    protected abstract void endPointOpened(SelectChannelEndPoint endpoint);    /* ------------------------------------------------------------------------------- */    protected abstract Connection newConnection(SocketChannel channel, SelectChannelEndPoint endpoint);    /* ------------------------------------------------------------ */    /**     * @param channel     * @param selectSet     * @param sKey     * @return     * @throws IOException     */    protected abstract SelectChannelEndPoint newEndPoint(SocketChannel channel, SelectorManager.SelectSet selectSet, SelectionKey sKey) throws IOException;    /* ------------------------------------------------------------------------------- */    protected void connectionFailed(SocketChannel channel,Throwable ex,Object attachment)    {        Log.warn(ex);    }        /* ------------------------------------------------------------------------------- */    /* ------------------------------------------------------------------------------- */    /* ------------------------------------------------------------------------------- */    public class SelectSet     {        private transient int _change;        private transient List[] _changes;        private transient Timeout _idleTimeout;        private transient int _nextSet;        private transient Timeout _retryTimeout;        private transient Selector _selector;        private transient int _setID;        private transient boolean _selecting;        private transient int _jvmBug;                /* ------------------------------------------------------------ */        SelectSet(int acceptorID) throws Exception        {            _setID=acceptorID;            _idleTimeout = new Timeout();            _idleTimeout.setDuration(getMaxIdleTime());            _retryTimeout = new Timeout();            _retryTimeout.setDuration(0L);            // create a selector;            _selector = Selector.open();            _changes = new ArrayList[] {new ArrayList(),new ArrayList()};            _change=0;        }                /* ------------------------------------------------------------ */        public void addChange(Object point)        {            synchronized (_changes)            {                _changes[_change].add(point);                if (point instanceof SocketChannel)                    _changes[_change].add(null);            }        }                /* ------------------------------------------------------------ */        public void addChange(SocketChannel channel, Object att)        {               synchronized (_changes)            {                _changes[_change].add(channel);                _changes[_change].add(att);            }        }                /* ------------------------------------------------------------ */        public void cancelIdle(Timeout.Task task)        {            synchronized (this)            {                task.cancel();            }        }        /* ------------------------------------------------------------ */        /**         * Select and dispatch tasks found from changes and the selector.         *          * @throws IOException         */        public void doSelect() throws IOException        {            SelectionKey key=null;                        try            {                List changes;                synchronized (_changes)                {                    changes=_changes[_change];                    _change=_change==0?1:0;                    _selecting=true;                }                // Make any key changes required                for (int i = 0; i < changes.size(); i++)                {                    try                    {                        Object o = changes.get(i);                        if (o instanceof EndPoint)                        {                            // Update the operations for a key.                            SelectChannelEndPoint endpoint = (SelectChannelEndPoint)o;                            endpoint.doUpdateKey();                        }                        else if (o instanceof Runnable)                        {                            dispatch((Runnable)o);                        }                        else if (o instanceof SocketChannel)                        {                            // finish accepting/connecting this connection                            SocketChannel channel=(SocketChannel)o;                            Object att = changes.get(++i);                            if (channel.isConnected())                            {                                key = channel.register(_selector,SelectionKey.OP_READ,att);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品日韩一区二区三区| 欧美人牲a欧美精品| 韩国成人福利片在线播放| 免费在线欧美视频| 美美哒免费高清在线观看视频一区二区| 亚洲成人av在线电影| 亚洲午夜激情av| 亚洲成国产人片在线观看| 午夜国产精品影院在线观看| 亚洲成a人v欧美综合天堂下载 | 日韩亚洲欧美中文三级| 制服视频三区第一页精品| 91精品国产福利在线观看| 91精品国产福利| 精品国产在天天线2019| 久久免费美女视频| 中文字幕一区在线观看| 亚洲一区二区三区视频在线 | 男人的j进女人的j一区| 麻豆精品一二三| 国产精品伊人色| 成人av动漫网站| 欧美在线短视频| 日韩一区二区免费视频| 久久久久久久久久久久久女国产乱| 国产欧美精品一区二区色综合朱莉 | 91污在线观看| 欧美偷拍一区二区| 精品欧美一区二区在线观看| 久久免费视频色| 亚洲精品一二三四区| 免费高清视频精品| 99久久精品国产一区| 欧美色网一区二区| 精品盗摄一区二区三区| 中文字幕在线一区| 亚洲成人动漫av| 国产成人日日夜夜| 91精品办公室少妇高潮对白| 日韩欧美一二三区| 中文字幕一区在线观看| 日韩专区在线视频| 丰满少妇在线播放bd日韩电影| 欧美午夜精品久久久久久孕妇| 精品日韩在线观看| 亚洲欧美日韩系列| 精品综合免费视频观看| 色综合天天在线| 精品欧美久久久| 一级特黄大欧美久久久| 狠狠狠色丁香婷婷综合久久五月| 国产精品第五页| 日韩精品成人一区二区三区| 成人午夜碰碰视频| 8x福利精品第一导航| 亚洲欧洲av一区二区三区久久| 日韩精品亚洲一区| 99视频超级精品| 亚洲精品一区二区三区四区高清| 最新日韩在线视频| 九色porny丨国产精品| 欧美日韩在线观看一区二区 | 3d动漫精品啪啪| 中文字幕制服丝袜成人av| 蜜乳av一区二区| 日本黄色一区二区| 中文字幕免费不卡| 国产原创一区二区| 欧美一区二区三区影视| 亚洲欧美激情小说另类| 国产成人精品三级麻豆| 日韩欧美高清在线| 天天影视涩香欲综合网 | 久久精品视频在线免费观看| 亚洲bdsm女犯bdsm网站| 99久久免费视频.com| 久久久亚洲精品石原莉奈| 日本伊人午夜精品| 色婷婷av一区二区三区软件| 国产精品欧美久久久久一区二区 | 欧美伊人久久久久久午夜久久久久| 国产日韩欧美精品电影三级在线| 日av在线不卡| 欧美一区二区免费观在线| 亚洲成av人片在线| 色婷婷久久久亚洲一区二区三区 | 国产精品理论片| 国产美女视频一区| 精品日本一线二线三线不卡| 日产国产高清一区二区三区| 一区二区高清在线| 成人av第一页| 亚洲国产精品v| 国产成人午夜精品影院观看视频 | 精品视频123区在线观看| 中文字幕一区二区三区蜜月| 懂色av一区二区夜夜嗨| 国产亚洲一二三区| 国产一区二区在线观看免费| 精品美女在线播放| 九九精品一区二区| 久久一区二区三区四区| 激情综合一区二区三区| 久久久亚洲精品一区二区三区| 精品无码三级在线观看视频| 精品99999| 国产成人免费在线| 国产精品久久久久久久浪潮网站| 成人国产精品免费网站| 成人欧美一区二区三区白人| 91在线一区二区三区| 一区二区三区精品在线| 欧美网站一区二区| 热久久免费视频| 久久综合九色综合欧美亚洲| 国产福利精品导航| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲精品一区二区三区在线观看 | 一本大道av一区二区在线播放| 亚洲人成网站在线| 欧洲精品在线观看| 日韩影院免费视频| 精品国产乱码久久久久久浪潮| 国产精品123| 亚洲精品视频在线观看网站| 欧美日韩精品专区| 久久不见久久见免费视频7 | 秋霞影院一区二区| 久久久精品2019中文字幕之3| av网站免费线看精品| 亚洲成av人片一区二区梦乃| 日韩精品一区在线观看| 大胆亚洲人体视频| 亚洲成av人片在线观看无码| 亚洲精品一区二区三区精华液| 国产成人av一区二区| 亚洲国产综合在线| 26uuuu精品一区二区| 91女厕偷拍女厕偷拍高清| 日韩**一区毛片| 国产精品网站在线播放| 欧美唯美清纯偷拍| 国产精品原创巨作av| 一区二区日韩av| www国产精品av| 欧美午夜精品一区二区蜜桃| 狠狠色伊人亚洲综合成人| 成人av电影在线播放| 三级欧美韩日大片在线看| 国产农村妇女精品| 欧美美女喷水视频| 国产iv一区二区三区| 亚洲成av人在线观看| 中文字幕第一区二区| 欧美日韩国产综合一区二区三区| 国内久久精品视频| 亚洲成人激情社区| 中文字幕一区二区三区av| 欧美一级高清片| 日本高清成人免费播放| 国产老肥熟一区二区三区| 亚洲一区二区av电影| 国产日产欧产精品推荐色 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产丝袜欧美中文另类| 欧美日韩卡一卡二| 成人黄色a**站在线观看| 麻豆91小视频| 亚洲成av人影院在线观看网| 中文字幕中文字幕中文字幕亚洲无线| 91精品国产一区二区三区 | 久久久精品影视| 在线播放国产精品二区一二区四区| 成人精品视频一区二区三区| 久久草av在线| 日韩专区中文字幕一区二区| 亚洲精品欧美激情| 国产精品天美传媒沈樵| 精品国产伦一区二区三区观看体验| 在线免费观看一区| 91美女视频网站| 成人午夜又粗又硬又大| 国产九色sp调教91| 久久精品理论片| 日韩av一区二| 亚洲第一精品在线| 亚洲一区在线观看网站| 亚洲视频免费观看| 欧美国产综合一区二区| 精品国产乱码久久久久久图片| 欧美一级久久久| 欧美一区二区在线看| 欧美日本一区二区在线观看| 91国产视频在线观看| 91色porny在线视频| 91毛片在线观看| 99精品1区2区| 国产精品嫩草影院com| 中文字幕国产一区| 国产精品高潮呻吟|