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

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

?? fc.java.txt

?? JGRoups源碼
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
        StringBuffer sb=null;        boolean unblock=false;        if(trace) {            Long old_credit=(Long)sent.get(sender);            sb=new StringBuffer();            sb.append("received credit from ").append(sender).append(", old credit was ").                    append(old_credit).append(", new credits are ").append(max_credits).                    append(".\nCreditors before are: ").append(creditors);        }        synchronized(sent) {            sent.put(sender, new Long(max_credits));            if(creditors.size() > 0) {  // we are blocked because we expect credit from one or more members                removeCreditor(sender);                if(trace) {                    sb.append("\nCreditors after removal of ").append(sender).append(" are: ").append(creditors);                    log.trace(sb.toString());                }                if(creditors.size() == 0) {                    unblock=true;                }            }            else {  // no creditors, but still blocking: we need to unblock                if(Boolean.TRUE.equals(blocking.get()))                    unblock=true;            }        }        if(unblock) // moved this outside of the 'sent' synchronized block            unblockSender();    }    /**     * Check whether sender has enough credits left. If not, send him some more     * @param msg     */    private void adjustCredit(Message msg) {        Address src=msg.getSrc();        long    size=Math.max(24, msg.getLength());        if(src == null) {            if(log.isErrorEnabled()) log.error("src is null");            return;        }        if(decrementCredit(received, src, size, min_credits) == false) {            received.put(src, new Long(max_credits));            if(trace) log.trace("sending replenishment message to " + src);            sendCredit(src);        }    }    private void sendCredit(Address dest) {        Message  msg=new Message(dest, null, null);        msg.putHeader(name, REPLENISH_HDR);        passDown(new Event(Event.MSG, msg));    }    private void sendCreditRequest(final Address dest) {        Message  msg=new Message(dest, null, null);        msg.putHeader(name, CREDIT_REQUEST_HDR);        passDown(new Event(Event.MSG, msg));    }    /**     * Checks whether enough credits are available to send message. If not, blocks until enough credits     * are available     * @param evt Guaranteed to be a Message     * @return     */    private void waitUntilEnoughCreditsAvailable() {        while(true) {            try {                blocking.waitUntilWithTimeout(Boolean.FALSE, max_block_time);  // waits on 'sent'                break;            }            catch(TimeoutException e) {                List tmp=new ArrayList(creditors);                if(trace)                    log.trace("timeout occurred waiting for credits; sending credit request to " + tmp +                              ", creditors are " + creditors);                Address mbr;                for(Iterator it=tmp.iterator(); it.hasNext();) {                    mbr=(Address)it.next();                    sendCreditRequest(mbr);                }            }        }    }    /**     * Try to decrement the credits needed for this message and return true if successful, or false otherwise.     * For unicast destinations, the credits required are subtracted from the unicast destination member, for     * multicast messages the credits are subtracted from all current members in the group.     * @param msg     * @return false: will block, true: will not block     */    private boolean decrMessage(Message msg) {        Address dest;        long    size;        boolean success=true;        // ******************************************************************************************************        // this method is called by waitUntilEnoughCredits() which syncs on 'sent', so we don't need to sync here        // ******************************************************************************************************        if(msg == null) {            if(log.isErrorEnabled()) log.error("msg is null");            return true; // don't block !        }        dest=msg.getDest();        size=Math.max(24, msg.getLength());        if(dest != null && !dest.isMulticastAddress()) { // unicast destination            if(decrementCredit(sent, dest, size, 0)) {                return true;            }            else {                addCreditor(dest);                return false;            }        }        else {                 // multicast destination            for(Iterator it=members.iterator(); it.hasNext();) {                dest=(Address)it.next();                if(decrementCredit(sent, dest, size, 0) == false) {                    addCreditor(dest);                    success=false;                }            }        }        return success;    }    /** If message queueing is enabled, sends queued messages and unlocks sender (if successful) */    private void unblockSender() {        if(start_blocking > 0) {            stop_blocking=System.currentTimeMillis();            long diff=stop_blocking - start_blocking;            total_time_blocking+=diff;            last_blockings.add(new Long(diff));            stop_blocking=start_blocking=0;            if(trace)                log.trace("setting blocking=false, blocking time was " + diff + "ms");        }        if(trace)            log.trace("setting blocking=false");        blocking.set(Boolean.FALSE);    }    private void addCreditor(Address mbr) {        if(mbr != null && !creditors.contains(mbr))            creditors.add(mbr);    }    private void removeCreditor(Address mbr) {        creditors.remove(mbr);    }    /**     * Find the credits associated with <tt>dest</tt> and decrement its credits by credits_required. If the remaining     * value is less than or equal to 0, return false, else return true. Note that we will always subtract the credits.     * @param map     * @param dest     * @param credits_required Number of bytes required     * @param minimal_credits For the receiver: add minimal credits to check whether credits need to be sent     * @return Whether the required credits could successfully be subtracted from the credits left     */    private boolean decrementCredit(Map map, Address dest, long credits_required, long minimal_credits) {        long    credits_left, new_credits_left;        Long    tmp=(Long)map.get(dest);        boolean success;        if(tmp == null)            return true;        credits_left=tmp.longValue();        success=credits_left > (credits_required + minimal_credits);        new_credits_left=Math.max(0, credits_left - credits_required);        map.put(dest, new Long(new_credits_left));        if(success) {            return true;        }        else {            if(trace) {                StringBuffer sb=new StringBuffer();                sb.append("not enough credits left for ").append(dest).append(": left=").append(new_credits_left);                sb.append(", required+min_credits=").append((credits_required +min_credits)).append(", required=");                sb.append(credits_required).append(", min_credits=").append(min_credits);                log.trace(sb.toString());            }            return false;        }    }    void handleViewChange(Vector mbrs) {        Address addr;        if(mbrs == null) return;        if(trace) log.trace("new membership: " + mbrs);        members.clear();        members.addAll(mbrs);        synchronized(received) {            // add members not in membership to received hashmap (with full credits)            for(int i=0; i < mbrs.size(); i++) {                addr=(Address) mbrs.elementAt(i);                if(!received.containsKey(addr))                    received.put(addr, new Long(max_credits));            }            // remove members that left            for(Iterator it=received.keySet().iterator(); it.hasNext();) {                addr=(Address) it.next();                if(!mbrs.contains(addr))                    it.remove();            }        }        boolean unblock=false;        synchronized(sent) {            // add members not in membership to sent hashmap (with full credits)            for(int i=0; i < mbrs.size(); i++) {                addr=(Address) mbrs.elementAt(i);                if(!sent.containsKey(addr))                    sent.put(addr, new Long(max_credits));            }            // remove members that left            for(Iterator it=sent.keySet().iterator(); it.hasNext();) {                addr=(Address)it.next();                if(!mbrs.contains(addr))                    it.remove(); // modified the underlying map            }            // remove all creditors which are not in the new view            for(int i=0; i < creditors.size(); i++) {                Address creditor=(Address)creditors.elementAt(i);                if(!mbrs.contains(creditor))                    creditors.remove(creditor);            }            if(trace) log.trace("creditors are " + creditors);            if(creditors.size() == 0)                unblock=true;        }        if(unblock)            unblockSender();    }    private static String printMap(Map m) {        Map.Entry entry;        StringBuffer sb=new StringBuffer();        for(Iterator it=m.entrySet().iterator(); it.hasNext();) {            entry=(Map.Entry)it.next();            sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");        }        return sb.toString();    }    public static class FcHeader extends Header implements Streamable {        public static final byte REPLENISH      = 1;        public static final byte CREDIT_REQUEST = 2; // the sender of the message is the requester        byte  type = REPLENISH;        public FcHeader() {        }        public FcHeader(byte type) {            this.type=type;        }        public long size() {            return Global.BYTE_SIZE;        }        public void writeExternal(ObjectOutput out) throws IOException {            out.writeByte(type);        }        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {            type=in.readByte();        }        public void writeTo(DataOutputStream out) throws IOException {            out.writeByte(type);        }        public void readFrom(DataInputStream in) throws IOException, IllegalAccessException, InstantiationException {            type=in.readByte();        }        public String toString() {            switch(type) {            case REPLENISH: return "REPLENISH";            case CREDIT_REQUEST: return "CREDIT_REQUEST";            default: return "<invalid type>";            }        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品99久久久久久| 国产精品综合一区二区三区| 久久国产成人午夜av影院| 成人中文字幕电影| 日韩午夜激情av| 亚洲精品一二三区| 国产.欧美.日韩| 日韩一区二区电影在线| 一区二区三区中文字幕在线观看| 国产黄人亚洲片| 3atv在线一区二区三区| 一区二区三区不卡视频| 波多野结衣中文一区| 久久综合久久99| 日韩高清在线电影| 欧美日韩一二区| 亚洲综合男人的天堂| 色婷婷综合久色| 最新久久zyz资源站| 国产激情一区二区三区桃花岛亚洲| 91麻豆精品国产综合久久久久久| 亚洲一区在线观看免费| 色婷婷亚洲精品| 亚洲人成网站影音先锋播放| 成人激情电影免费在线观看| 国产亚洲va综合人人澡精品| 国产成人午夜视频| 国产亚洲1区2区3区| 国产一区二区三区在线观看免费视频| 日韩免费观看高清完整版| 日韩电影免费在线| 日韩精品中文字幕在线一区| 奇米一区二区三区| 精品国产露脸精彩对白| 狠狠网亚洲精品| 国产亚洲精品7777| 成人激情动漫在线观看| 综合分类小说区另类春色亚洲小说欧美| 国产丶欧美丶日本不卡视频| 久久久久97国产精华液好用吗| 国产精品亚洲а∨天堂免在线| 欧美激情一区三区| 91一区二区三区在线播放| 亚洲欧美一区二区三区国产精品| 91免费观看国产| 天天影视涩香欲综合网| 欧美一级欧美三级在线观看| 另类小说一区二区三区| 久久久99久久| 99精品久久99久久久久| 亚洲永久精品大片| 日韩亚洲欧美成人一区| 国产成人精品一区二| 国产精品久久久久久久蜜臀| 欧亚洲嫩模精品一区三区| 免费看精品久久片| 国产欧美日韩三区| 在线看日本不卡| 激情综合五月天| 亚洲欧美另类久久久精品| 91精品欧美久久久久久动漫| 国产成人精品亚洲日本在线桃色| 中文字幕一区二区三区视频| 911精品产国品一二三产区| 国产在线日韩欧美| 一区二区三区在线观看动漫| 欧美电影免费观看高清完整版在 | 欧美精品精品一区| 久久精品国产成人一区二区三区| 国产欧美精品一区二区三区四区| 99久久精品国产毛片| 午夜精品一区在线观看| 国产日韩在线不卡| 欧美三级日韩三级国产三级| 国产精品1区二区.| 亚洲v日本v欧美v久久精品| 久久久不卡网国产精品一区| 欧美主播一区二区三区美女| 国产另类ts人妖一区二区| 一区二区三区成人| 中文字幕免费不卡| 日韩一区二区三区视频在线| 99国内精品久久| 国产一区二区免费看| 三级不卡在线观看| 亚洲欧洲性图库| 久久蜜桃av一区二区天堂| 欧美日韩一区 二区 三区 久久精品| 国产精品系列在线观看| 欧美aⅴ一区二区三区视频| 亚洲欧美激情在线| 中文字幕精品一区二区精品绿巨人| 91精品国产手机| 色www精品视频在线观看| 国产精品一区二区三区网站| 日韩福利电影在线观看| 一区二区三区四区在线免费观看 | 91精品国产综合久久香蕉的特点| 成人午夜免费电影| 久久精品国产精品青草| 日日摸夜夜添夜夜添国产精品 | 国产日韩欧美综合在线| 精品少妇一区二区三区日产乱码| 欧美日本乱大交xxxxx| 色噜噜狠狠色综合中国| 99久久婷婷国产综合精品电影| 国内精品伊人久久久久影院对白| 日韩成人伦理电影在线观看| 亚洲一区二区在线视频| 亚洲美女视频在线观看| 亚洲六月丁香色婷婷综合久久| 国产精品国产三级国产普通话蜜臀| 久久综合色婷婷| www成人在线观看| 久久久777精品电影网影网| 欧美成人一区二区| 26uuu国产一区二区三区| 精品久久久久久久久久久久包黑料| 日韩久久免费av| 精品粉嫩aⅴ一区二区三区四区| 欧美成人video| 久久久久国色av免费看影院| 日本一区二区三区在线不卡 | 国产一区二区三区在线观看免费视频| 久久国产夜色精品鲁鲁99| 美日韩一级片在线观看| 久久国产三级精品| 国内精品久久久久影院薰衣草| 日韩av不卡一区二区| 色欧美88888久久久久久影院| 国产**成人网毛片九色 | 天堂在线一区二区| 亚洲韩国精品一区| 亚洲丰满少妇videoshd| 亚洲h动漫在线| 精品在线一区二区三区| 国产成人免费视| 日本道色综合久久| 欧美日韩国产精品成人| 欧美大片免费久久精品三p| 国产欧美日韩视频一区二区| 亚洲男人天堂一区| 免费成人在线影院| 岛国av在线一区| 色婷婷av一区二区三区大白胸 | 日本成人在线视频网站| 久久av老司机精品网站导航| 丁香婷婷综合五月| 欧美伊人久久大香线蕉综合69| 日韩一区二区麻豆国产| 国产精品欧美久久久久一区二区| 亚洲曰韩产成在线| 精品一区二区三区视频| 一本久久a久久精品亚洲| 日韩精品一区二区三区在线播放 | 久久综合国产精品| 亚洲色图丝袜美腿| 人人精品人人爱| 成人免费看黄yyy456| 欧美肥妇毛茸茸| 国产精品蜜臀av| 久久成人久久鬼色| 99re成人精品视频| 精品久久久久久亚洲综合网| 亚洲综合图片区| 成人伦理片在线| 欧美成人猛片aaaaaaa| 亚洲一区二区视频| 高清在线不卡av| 欧美成人在线直播| 亚洲成人精品在线观看| 成人免费视频免费观看| 欧美电影免费观看高清完整版在| 一区二区三区四区激情| 成人午夜私人影院| 久久女同性恋中文字幕| 日韩av电影一区| 欧美综合一区二区三区| 中文字幕在线视频一区| 国产一区二区三区免费观看| 3d成人h动漫网站入口| 亚洲成人av一区二区| 91麻豆.com| 中文字幕日韩一区二区| 国产精品亚洲视频| www成人在线观看| 精品亚洲免费视频| 7777女厕盗摄久久久| 亚洲一区二区三区在线| 91麻豆高清视频| 亚洲日本在线看| 99国内精品久久| 一色屋精品亚洲香蕉网站| 国产成人精品一区二区三区四区 | 亚洲免费看黄网站| 国产成人h网站| 国产亚洲一区二区三区在线观看| 精品在线你懂的| 精品福利一区二区三区| 激情综合色综合久久|