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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? selectchannelendpoint.java

?? 著名服務(wù)器nio的源碼
?? JAVA
字號(hào):
package org.mortbay.io.nio;import java.io.IOException;import java.nio.channels.ClosedChannelException;import java.nio.channels.SelectableChannel;import java.nio.channels.SelectionKey;import java.nio.channels.SocketChannel;import org.mortbay.io.Buffer;import org.mortbay.io.Connection;import org.mortbay.io.nio.SelectorManager.SelectSet;import org.mortbay.jetty.EofException;import org.mortbay.jetty.HttpException;import org.mortbay.log.Log;import org.mortbay.thread.Timeout;/* ------------------------------------------------------------ *//** * An Endpoint that can be scheduled by {@link SelectorManager}. *  * @author gregw * */public class SelectChannelEndPoint extends ChannelEndPoint implements Runnable{    protected SelectorManager _manager;    protected SelectorManager.SelectSet _selectSet;    protected boolean _dispatched = false;    protected boolean _writable = true;     protected SelectionKey _key;    protected int _interestOps;    protected boolean _readBlocked;    protected boolean _writeBlocked;    protected Connection _connection;    private Timeout.Task _timeoutTask = new IdleTask();    /* ------------------------------------------------------------ */    public Connection getConnection()    {        return _connection;    }        /* ------------------------------------------------------------ */    public SelectChannelEndPoint(SocketChannel channel, SelectSet selectSet, SelectionKey key)    {        super(channel);        _manager = selectSet.getManager();        _selectSet = selectSet;        _connection = _manager.newConnection(channel,this);                _manager.endPointOpened(this); // TODO not here!                _key = key;    }    /* ------------------------------------------------------------ */    void dispatch() throws IOException    {        boolean dispatch_done = true;        try        {            if (dispatch(_manager.isDelaySelectKeyUpdate()))            {                dispatch_done= false;                dispatch_done = _manager.dispatch((Runnable)this);            }        }        finally        {            if (!dispatch_done)            {                Log.warn("dispatch failed!");                undispatch();            }        }    }        /* ------------------------------------------------------------ */    /**     * Put the endpoint into the dispatched state.     * A blocked thread may be woken up by this call, or the endpoint placed in a state ready     * for a dispatch to a threadpool.     * @param assumeShortDispatch If true, the interested ops are not modified.     * @return True if the endpoint should be dispatched to a thread pool.     * @throws IOException     */    public boolean dispatch(boolean assumeShortDispatch) throws IOException    {        // If threads are blocked on this        synchronized (this)        {            if (_key == null || !_key.isValid())            {                _readBlocked=false;                _writeBlocked=false;                this.notifyAll();                return false;            }                        if (_readBlocked || _writeBlocked)            {                if (_readBlocked && _key.isReadable())                    _readBlocked=false;                if (_writeBlocked && _key.isWritable())                    _writeBlocked=false;                // wake them up is as good as a dispatched.                this.notifyAll();                                // we are not interested in further selecting                _key.interestOps(0);                return false;            }            if (!assumeShortDispatch)                _key.interestOps(0);            // Otherwise if we are still dispatched            if (_dispatched)            {                // we are not interested in further selecting                _key.interestOps(0);                return false;            }            // Remove writeable op            if ((_key.readyOps() & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE && (_key.interestOps() & SelectionKey.OP_WRITE) == SelectionKey.OP_WRITE)            {                // Remove writeable op                _interestOps = _key.interestOps() & ~SelectionKey.OP_WRITE;                _key.interestOps(_interestOps);                _writable = true; // Once writable is in ops, only removed with dispatch.            }            _dispatched = true;        }        return true;    }    /* ------------------------------------------------------------ */    public void scheduleIdle()    {        _selectSet.scheduleIdle(_timeoutTask);    }    /* ------------------------------------------------------------ */    public void cancelIdle()    {        _selectSet.cancelIdle(_timeoutTask);    }    /* ------------------------------------------------------------ */    protected void idleExpired()    {        try        {            close();        }        catch (IOException e)        {            Log.ignore(e);        }    }        /* ------------------------------------------------------------ */    /**     * Called when a dispatched thread is no longer handling the endpoint. The selection key     * operations are updated.     */    public void undispatch()    {        synchronized (this)        {            try            {                _dispatched = false;                updateKey();            }            catch (Exception e)            {                // TODO investigate if this actually is a problem?                Log.ignore(e);                _interestOps = -1;                _selectSet.addChange(this);            }        }    }    /* ------------------------------------------------------------ */    /*     */    public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException    {        int l = super.flush(header, buffer, trailer);        _writable = l > 0;        return l;    }    /* ------------------------------------------------------------ */    /*     */    public int flush(Buffer buffer) throws IOException    {        int l = super.flush(buffer);        _writable = l > 0;        return l;    }    /* ------------------------------------------------------------ */    /*     * Allows thread to block waiting for further events.     */    public boolean blockReadable(long timeoutMs) throws IOException    {        synchronized (this)        {            long start=_selectSet.getNow();            try            {                   _readBlocked=true;                while (isOpen() && _readBlocked)                {                    try                    {                        updateKey();                        this.wait(timeoutMs);                        if (_readBlocked && timeoutMs<(_selectSet.getNow()-start))                            return false;                    }                    catch (InterruptedException e)                    {                        Log.warn(e);                    }                }            }            finally            {                _readBlocked=false;            }        }        return true;    }    /* ------------------------------------------------------------ */    /*     * Allows thread to block waiting for further events.     */    public boolean blockWritable(long timeoutMs) throws IOException    {        synchronized (this)        {            long start=_selectSet.getNow();            try            {                   _writeBlocked=true;                while (isOpen() && _writeBlocked)                {                    try                    {                        updateKey();                        this.wait(timeoutMs);                        if (_writeBlocked && timeoutMs<(_selectSet.getNow()-start))                            return false;                    }                    catch (InterruptedException e)                    {                        Log.warn(e);                    }                }            }            finally            {                _writeBlocked=false;            }        }        return true;    }    /* ------------------------------------------------------------ */    public void setWritable(boolean writable)    {        _writable=writable;    }        /* ------------------------------------------------------------ */    public void scheduleWrite()    {        _writable=false;        updateKey();    }        /* ------------------------------------------------------------ */    /**     * Updates selection key. Adds operations types to the selection key as needed. No operations     * are removed as this is only done during dispatch. This method records the new key and     * schedules a call to doUpdateKey to do the keyChange     */    private void updateKey()    {        synchronized (this)        {            int ops=-1;            if (getChannel().isOpen())            {                ops = ((_key!=null && _key.isValid())?_key.interestOps():-1);                _interestOps =                     ((!_dispatched || _readBlocked)  ? SelectionKey.OP_READ  : 0)                 |   ((!_writable   || _writeBlocked) ? SelectionKey.OP_WRITE : 0);            }            if(_interestOps == ops && getChannel().isOpen())                return;                    }        _selectSet.addChange(this);        _selectSet.wakeup();    }        /* ------------------------------------------------------------ */    /**     * Synchronize the interestOps with the actual key. Call is scheduled by a call to updateKey     */    void doUpdateKey()    {        synchronized (this)        {            if (getChannel().isOpen())            {                if (_interestOps>0)                {                    if (_key==null || !_key.isValid())                    {                        SelectableChannel sc = (SelectableChannel)getChannel();                        if (sc.isRegistered())                        {                            updateKey();                           }                        else                        {                            try                            {                                _key=((SelectableChannel)getChannel()).register(_selectSet.getSelector(),_interestOps,this);                            }                            catch (Exception e)                            {                                Log.ignore(e);                                if (_key!=null && _key.isValid())                                {                                    _key.cancel();                                }                                cancelIdle();                                _manager.endPointClosed(this);                                _key = null;                            }                        }                    }                    else                    {                        _key.interestOps(_interestOps);                    }                }                else                {                    if (_key.isValid())                        _key.interestOps(0);                    else                        _key=null;                }            }            else                {                if (_key!=null && _key.isValid())                {                    _key.interestOps(0);                    _key.cancel();                 }                cancelIdle();                _manager.endPointClosed(this);                _key = null;            }        }    }    /* ------------------------------------------------------------ */    /*      */    public void run()    {        try        {            _connection.handle();        }        catch (ClosedChannelException e)        {            Log.ignore(e);        }        catch (EofException e)        {            Log.debug("EOF", e);            try{close();}            catch(IOException e2){Log.ignore(e2);}        }        catch (HttpException e)        {            Log.debug("BAD", e);            try{close();}            catch(IOException e2){Log.ignore(e2);}        }        catch (Throwable e)        {            Log.warn("handle failed", e);            try{close();}            catch(IOException e2){Log.ignore(e2);}        }        finally        {            undispatch();        }    }    /* ------------------------------------------------------------ */    /*     * @see org.mortbay.io.nio.ChannelEndPoint#close()     */    public void close() throws IOException    {        try        {            super.close();        }        catch (IOException e)        {            Log.ignore(e);        }           finally        {            updateKey();        }    }        /* ------------------------------------------------------------ */    public String toString()    {        return "SCEP@" + hashCode() + "[d=" + _dispatched + ",io=" + _interestOps + ",w=" + _writable + ",b=" + _readBlocked + "|" + _writeBlocked + "]";    }    /* ------------------------------------------------------------ */    public Timeout.Task getTimeoutTask()    {        return _timeoutTask;    }    /* ------------------------------------------------------------ */    public SelectSet getSelectSet()    {        return _selectSet;    }    /* ------------------------------------------------------------ */    /* ------------------------------------------------------------ */    /* ------------------------------------------------------------ */    public class IdleTask extends Timeout.Task     {        /* ------------------------------------------------------------ */        /*         * @see org.mortbay.thread.Timeout.Task#expire()         */        public void expire()        {            idleExpired();        }        public String toString()        {            return "TimeoutTask:" + SelectChannelEndPoint.this.toString();        }    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国内精品视频| 亚洲欧美日韩国产成人精品影院| 久久色在线观看| 国产精品美女久久久久高潮| 夜夜精品视频一区二区| 免费欧美在线视频| 成av人片一区二区| 正在播放亚洲一区| 国产精品福利一区| 日本不卡视频在线观看| 成人午夜在线免费| 欧美日韩亚洲综合在线| 国产日本欧美一区二区| 亚洲午夜激情网站| 盗摄精品av一区二区三区| 精品视频在线视频| 久久精品视频一区| 午夜久久久久久电影| 成人高清av在线| 欧美丰满少妇xxxbbb| 国产精品久久午夜夜伦鲁鲁| 蜜臀av一区二区在线观看 | 91精品国产高清一区二区三区蜜臀 | 国产亚洲va综合人人澡精品| 亚洲国产成人va在线观看天堂| 国产精品一区专区| 欧美日韩美女一区二区| 国产欧美日韩久久| 免费在线一区观看| 91福利视频网站| 国产偷国产偷精品高清尤物| 日韩福利电影在线观看| 在线中文字幕一区二区| 国产欧美一区二区精品秋霞影院| 日韩精彩视频在线观看| 一本高清dvd不卡在线观看| 欧美国产乱子伦| 久久福利视频一区二区| 欧美日韩国产精品自在自线| 亚洲人成电影网站色mp4| 国产成人精品在线看| 欧美mv日韩mv| 日本免费在线视频不卡一不卡二| 在线观看国产一区二区| 亚洲情趣在线观看| 99久久精品费精品国产一区二区| 久久精品人人做人人爽97| 美女视频免费一区| 337p亚洲精品色噜噜狠狠| 亚洲免费观看高清完整版在线| 成人久久视频在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 日韩国产在线一| 欧美视频一区二区三区在线观看| 中文字幕永久在线不卡| 国产黑丝在线一区二区三区| 精品久久五月天| 麻豆精品一二三| 欧美成人在线直播| 毛片一区二区三区| 正在播放亚洲一区| 免费成人av资源网| 欧美一二区视频| 免费视频一区二区| 日韩写真欧美这视频| 视频精品一区二区| 51精品秘密在线观看| 日韩精品亚洲一区| 欧美一区二区三区系列电影| 日韩电影在线一区二区三区| 日韩一区二区不卡| 久久99久久99小草精品免视看| 日韩欧美国产一区二区三区| 老色鬼精品视频在线观看播放| 欧美一区二区三区爱爱| 久久精品72免费观看| 久久男人中文字幕资源站| 精品无人码麻豆乱码1区2区| 精品久久人人做人人爽| 国产老女人精品毛片久久| 久久九九影视网| 国产精品 日产精品 欧美精品| 久久综合色8888| 成人国产精品免费观看动漫 | 91福利社在线观看| 亚洲一区二区精品视频| 欧美日韩高清一区二区三区| 日韩高清在线电影| 精品国精品国产| 成人一区二区三区在线观看| 亚洲精品水蜜桃| 欧美日韩久久一区二区| 精品一区中文字幕| 国产日产亚洲精品系列| 色婷婷一区二区三区四区| 日韩激情一二三区| 久久久精品人体av艺术| 色综合天天做天天爱| 天天影视涩香欲综合网| 亚洲精品一区二区三区蜜桃下载 | 国产精品国产a| 欧美日韩在线直播| 久久99国产精品免费网站| 国产精品剧情在线亚洲| 欧美精品三级日韩久久| 国产成人午夜精品影院观看视频| 亚洲色图制服丝袜| 日韩午夜在线影院| 成人综合婷婷国产精品久久免费| 亚洲一区二区综合| 欧美va日韩va| 色哟哟精品一区| 狠狠久久亚洲欧美| 伊人婷婷欧美激情| 精品欧美乱码久久久久久| 波多野结衣中文字幕一区二区三区| 亚洲一区二区在线观看视频| 精品国产乱子伦一区| 在线精品视频免费观看| 精品一区二区日韩| 亚洲精品视频观看| 精品日韩欧美在线| 一本大道久久精品懂色aⅴ| 久久97超碰国产精品超碰| 亚洲男人的天堂在线观看| 欧美va亚洲va香蕉在线| 在线免费观看不卡av| 国产精品亚洲а∨天堂免在线| 亚洲国产aⅴ天堂久久| 欧美激情一区在线| 日韩一区二区三区在线视频| 91免费观看在线| 久久精品久久综合| 亚洲午夜电影网| 国产精品美女久久久久高潮| 日韩欧美国产三级电影视频| 91成人在线免费观看| 国产91高潮流白浆在线麻豆| 蜜臀a∨国产成人精品| 一区二区三区产品免费精品久久75| 国产色产综合色产在线视频| 7777精品久久久大香线蕉| 91免费观看视频| 成人午夜免费电影| 狠狠色丁香婷综合久久| 日韩精品一级二级 | 日韩一区二区在线播放| 在线观看欧美精品| www.日韩av| 国产精品一区二区久激情瑜伽| 日韩高清不卡一区| 亚洲综合视频在线观看| 中文字幕佐山爱一区二区免费| 久久久久久久电影| 日韩欧美国产小视频| 91精品中文字幕一区二区三区| 欧美亚洲国产一区二区三区va | 亚洲国产精品麻豆| 国产精品久久久久影院| 精品成人一区二区| 日韩一级视频免费观看在线| 欧美日韩国产成人在线91| 91国偷自产一区二区开放时间| av成人老司机| 成人精品免费看| 国产999精品久久| 国产一区二区精品在线观看| 久久成人免费网| 蜜臀av性久久久久蜜臀av麻豆| 日韩不卡一区二区| 丝袜国产日韩另类美女| 午夜精品在线看| 天天影视涩香欲综合网| 日日夜夜免费精品视频| 亚洲超碰97人人做人人爱| 亚洲国产欧美在线| 午夜精品在线看| 日韩主播视频在线| 日韩精品1区2区3区| 日本网站在线观看一区二区三区| 日韩精品午夜视频| 免费不卡在线观看| 精品一区二区三区免费观看| 精品在线播放免费| 国产精品18久久久久久久网站| 国产一本一道久久香蕉| 岛国精品一区二区| 97久久精品人人澡人人爽| 91极品美女在线| 欧美性生活大片视频| 欧美日韩一区二区三区在线| 欧美日韩国产a| 欧美videossexotv100| 国产亚洲综合性久久久影院| 国产精品久久久久久久久快鸭 | 欧美日韩在线观看一区二区 | 免费在线观看成人| 国产一级精品在线| 成人动漫av在线| 91激情五月电影|