欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何理解javareflect

本篇文章給大家分享的是有關(guān)如何理解java reflect,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)是專業(yè)的播州網(wǎng)站建設(shè)公司,播州接單;提供成都做網(wǎng)站、網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行播州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!

            SelectedSelectionKeySet selectedKeySet = new SelectedSelectionKeySet();

            Class<?> selectorImplClass =
                    Class.forName("sun.nio.ch.SelectorImpl", false, ClassLoader.getSystemClassLoader());

            // Ensure the current selector implementation is what we can instrument.
            if (!selectorImplClass.isAssignableFrom(selector.getClass())) {
                return selector;
            }

            Field selectedKeysField = selectorImplClass.getDeclaredField("selectedKeys");
            Field publicSelectedKeysField = selectorImplClass.getDeclaredField("publicSelectedKeys");

            selectedKeysField.setAccessible(true);
            publicSelectedKeysField.setAccessible(true);

            selectedKeysField.set(selector, selectedKeySet);
            publicSelectedKeysField.set(selector, selectedKeySet);

            selectedKeys = selectedKeySet;

先看第一行, SelectedSelectionKeySet selectedKeySet = new SelectedSelectionKeySet(); 這個東西干嗎用的,替代selector默認(rèn)實現(xiàn)當(dāng)中的selectKeys這個字段,當(dāng)中的實現(xiàn)非常牛逼。后續(xù)再看。

跳過無關(guān)緊要的部分,直接看這段

Field selectedKeysField = selectorImplClass.getDeclaredField("selectedKeys");
Field publicSelectedKeysField = selectorImplClass.getDeclaredField("publicSelectedKeys");

取得2個field,目的是忘對象selector里面設(shè)值。

            selectedKeysField.setAccessible(true);
            publicSelectedKeysField.setAccessible(true);

            selectedKeysField.set(selector, selectedKeySet);
            publicSelectedKeysField.set(selector, selectedKeySet);

然后就是設(shè)值可訪問屬性,并且修改selector的2個屬性(selectedKeys 和 publicSelectedKeys ),設(shè)值為之前new出來的 selectedKeySet ,再讓 selectedKeys = selectedKeySet ,selector在執(zhí)行select的時候,就會修改 selectedKeys 當(dāng)中的屬性值。

然后再看看 SelectedSelectionKeySet 當(dāng)中究竟干了些什么:

final class SelectedSelectionKeySet extends AbstractSet<SelectionKey> {

    private SelectionKey[] keysA;
    private int keysASize;
    private SelectionKey[] keysB;
    private int keysBSize;
    private boolean isA = true;

    SelectedSelectionKeySet() {
        keysA = new SelectionKey[1024];
        keysB = keysA.clone();
    }

    @Override
    public boolean add(SelectionKey o) {
        if (o == null) {
            return false;
        }

        if (isA) {
            int size = keysASize;
            keysA[size ++] = o;
            keysASize = size;
            if (size == keysA.length) {
                doubleCapacityA();
            }
        } else {
            int size = keysBSize;
            keysB[size ++] = o;
            keysBSize = size;
            if (size == keysB.length) {
                doubleCapacityB();
            }
        }

        return true;
    }

    private void doubleCapacityA() {
        SelectionKey[] newKeysA = new SelectionKey[keysA.length << 1];
        System.arraycopy(keysA, 0, newKeysA, 0, keysASize);
        keysA = newKeysA;
    }

    private void doubleCapacityB() {
        SelectionKey[] newKeysB = new SelectionKey[keysB.length << 1];
        System.arraycopy(keysB, 0, newKeysB, 0, keysBSize);
        keysB = newKeysB;
    }

    SelectionKey[] flip() {
        if (isA) {
            isA = false;
            keysA[keysASize] = null;
            keysBSize = 0;
            return keysA;
        } else {
            isA = true;
            keysB[keysBSize] = null;
            keysASize = 0;
            return keysB;
        }
    }

    @Override
    public int size() {
        if (isA) {
            return keysASize;
        } else {
            return keysBSize;
        }
    }

    @Override
    public boolean remove(Object o) {
        return false;
    }

    @Override
    public boolean contains(Object o) {
        return false;
    }

    @Override
    public Iterator<SelectionKey> iterator() {
        throw new UnsupportedOperationException();
    }
}

用 keysA 和 keysB 2個數(shù)組,輪流保存SelectionKey,非常方便的實現(xiàn)了讀寫分離,用數(shù)組代替了set,極大地提高了內(nèi)存訪問效率。

以上就是如何理解java reflect,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享名稱:如何理解javareflect
分享地址:http://aaarwkj.com/article16/pcdggg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計、微信小程序、全網(wǎng)營銷推廣品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
亚洲国产一区二区精品| 国产精品一区二区三区日本| 中文字幕日韩不卡顿一区二区| 91九色最新国产在线| 未满十八禁在线观看免费| 久久国产精品av在线观看| 欧美午夜精品福利在线观看| 成年人正常性生活频率| 精品久久av一区二区三区| 欧美亚洲另类在线日韩国产| 香蕉夜夜草草久久亚洲香蕉| 久草视频免费福利资源站| 欧美黄片在线播放视频| 久久青草精品欧美日韩精品| 99精品国产高清一区二区三区| 亚洲精品乱码国产妇女毛片| 日本一区二区不卡视频在线播放| 天天操夜夜骑日日干| 夫妻性生活一级片视频| 人人人妻人人澡人人爽e| 亚洲一区二区三区在线播| 亚洲国产日韩欧美一级| 日本中文字幕一区二区视频| 日本特黄高清免费大片| 亚洲超清av在线播放一区二区| 欧美日韩亚洲精品久久| 国产毛片一区二区三区二区| 日韩一二区不卡在线视频| 午夜免费视频观看在线| 日韩精品一区二区91| 日韩欧美亚洲国产一区久久精品 | 亚洲精品女同专区视频| 国产一区二区高清在线| 亚洲第一精品国产日韩| 久久精品91久久久| 亚洲成人精品免费观看| 国产亚洲欧美日韩看国产| 三欲一区二区三区中文字幕| 久久热最新免费观看视频| 黄片视频免费观看一起草| 91熟女成人精品一区二区|