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

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

?? modulemanager.java

?? OSGI 的 源碼實現,采用JAVA書寫
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
     * Resets a given module. In resetting a module, the module's associated     * class loader is thrown away; it is the application's responsibility to     * determine when and how that application code stops using classes (and     * subsequent instances) from the class loader of the reset module.     * This method allows the associated elements of the module (i.e.,     * attributes, resource sources, and library sources) to be changed also;     * if these elements have not changed then they simply need to be passed     * back in from the existing module. This method is useful in situations     * where the underlying module needs to be changed at run time, such as     * might be necessary if a module was updated.     * </p>     * <p>     * The same effect could be achieved by first removing and then re-adding     * a module, but with one subtle different. By removing and then re-adding     * a module, a new module is created and, thus, all existing references     * become invalid. By explicitly having this method, the <tt>ModuleManager</tt>     * maintains the integrity of the module reference, which is more intuitive     * in the case where an updated module is intended to be the same module,     * only updated.     * </p>     * @param module the module reset.     * @param attributes an array of key-value attribute pairs to     *        associate with the module.     * @param resSources an array of <tt>ResourceSource</tt>s to associate     *        with the module.     * @param libSources an array of <tt>LibrarySource</tt>s to associate     *        with the module.     * @see org.ungoverned.moduleloader.Module     * @see org.ungoverned.moduleloader.ResourceSource     * @see org.ungoverned.moduleloader.LibrarySource    **/    public void resetModule(        Module module, Object[][] attributes,        ResourceSource[] resSources, LibrarySource[] libSources)    {        // Use a synchronized block instead of synchronizing the        // method, so we can fire our event outside of the block.        synchronized (this)        {            module = (Module) m_moduleMap.get(module.getId());            if (module != null)            {                module.reset(attributes, resSources, libSources);            }            else            {                // Don't fire event.                return;            }        }        // Fire event here instead of inside synchronized block.        fireModuleReset(module);    }    /**     * <p>     * Removes the specified module from the <tt>ModuleManager</tt>. Removing     * a module only removed the module from the <tt>ModuleManager</tt>. It is     * the application's responsibility to determine when and how application code     * stop using classes (and subsequent instances) that were loaded from     * the class loader of the removed module.     * </p>     * @param module the module to remove.    **/    public void removeModule(Module module)    {        // Use a synchronized block instead of synchronizing the        // method, so we can fire our event outside of the block.        synchronized (this)        {            if (m_moduleMap.get(module.getId()) != null)            {                // Remove from data structures.                m_moduleList.remove(module);                m_moduleMap.remove(module.getId());                // Dispose of the module.                module.dispose();            }            else            {                // Don't fire event.                return;            }        }        // Fire event here instead of inside synchronized block.        fireModuleRemoved(module);    }    /**     * <p>     * Adds a listener to the <tt>ModuleManager</tt> to listen for     * module added, reset, and removed events.     * </p>     * @param l the <tt>ModuleListener</tt> to add.    **/    public void addModuleListener(ModuleListener l)    {        // Verify listener.        if (l == null)        {            throw new IllegalArgumentException("Listener is null");        }        // Use the m_noListeners object as a lock.        synchronized (m_noListeners)        {            // If we have no listeners, then just add the new listener.            if (m_listeners == m_noListeners)            {                m_listeners = new ModuleListener[] { l };            }            // Otherwise, we need to do some array copying.            // Notice, the old array is always valid, so if            // the dispatch thread is in the middle of a dispatch,            // then it has a reference to the old listener array            // and is not affected by the new value.            else            {                ModuleListener[] newList = new ModuleListener[m_listeners.length + 1];                System.arraycopy(m_listeners, 0, newList, 0, m_listeners.length);                newList[m_listeners.length] = l;                m_listeners = newList;            }        }    }    /**     * <p>     * Removes a listener from the <tt>ModuleManager</tt>.     * </p>     * @param l the <tt>ModuleListener</tt> to remove.    **/    public void removeModuleListener(ModuleListener l)    {        // Verify listener.        if (l == null)        {            throw new IllegalArgumentException("Listener is null");        }        // Use the m_noListeners object as a lock.        synchronized (m_noListeners)        {            // Try to find the instance in our list.            int idx = -1;            for (int i = 0; i < m_listeners.length; i++)            {                if (m_listeners[i].equals(l))                {                    idx = i;                    break;                }            }            // If we have the instance, then remove it.            if (idx >= 0)            {                // If this is the last listener, then point to empty list.                if (m_listeners.length == 1)                {                    m_listeners = m_noListeners;                }                // Otherwise, we need to do some array copying.                // Notice, the old array is always valid, so if                // the dispatch thread is in the middle of a dispatch,                // then it has a reference to the old listener array                // and is not affected by the new value.                else                {                    ModuleListener[] newList = new ModuleListener[m_listeners.length - 1];                    System.arraycopy(m_listeners, 0, newList, 0, idx);                    if (idx < newList.length)                    {                        System.arraycopy(m_listeners, idx + 1, newList, idx,                            newList.length - idx);                    }                    m_listeners = newList;                }            }        }    }    /**     * <p>     * Fires an event indicating that the specified module was added     * to the <tt>ModuleManager</tt>.     * </p>     * @param module the module that was added.    **/    protected void fireModuleAdded(Module module)    {        // Event holder.        ModuleEvent event = null;        // Get a copy of the listener array, which is guaranteed        // to not be null.        ModuleListener[] listeners = m_listeners;        // Loop through listeners and fire events.        for (int i = 0; i < listeners.length; i++)        {            // Lazily create event.            if (event == null)            {                event = new ModuleEvent(this, module);            }            listeners[i].moduleAdded(event);        }    }    /**     * <p>     * Fires an event indicating that the specified module was reset.     * </p>     * @param module the module that was reset.    **/    protected void fireModuleReset(Module module)    {        // Event holder.        ModuleEvent event = null;        // Get a copy of the listener array, which is guaranteed        // to not be null.        ModuleListener[] listeners = m_listeners;        // Loop through listeners and fire events.        for (int i = 0; i < listeners.length; i++)        {            // Lazily create event.            if (event == null)            {                event = new ModuleEvent(this, module);            }            listeners[i].moduleReset(event);        }    }    /**     * <p>     * Fires an event indicating that the specified module was removed     * from the <tt>ModuleManager</tt>.     * </p>     * @param module the module that was removed.    **/    protected void fireModuleRemoved(Module module)    {        // Event holder.        ModuleEvent event = null;        // Get a copy of the listener array, which is guaranteed        // to not be null.        ModuleListener[] listeners = m_listeners;        // Loop through listeners and fire events.        for (int i = 0; i < listeners.length; i++)        {            // Lazily create event.            if (event == null)            {                event = new ModuleEvent(this, module);            }            listeners[i].moduleRemoved(event);        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩有码一区二区三区| 91啪亚洲精品| 制服丝袜在线91| 亚洲成a人片在线观看中文| 91久久精品日日躁夜夜躁欧美| 日韩理论片在线| 色爱区综合激月婷婷| 亚洲国产精品久久人人爱蜜臀| 欧美在线视频日韩| 日本在线播放一区二区三区| 日韩欧美综合一区| 国产精品1区2区3区| 日本一区二区三区国色天香 | 五月天亚洲婷婷| 欧美精品色一区二区三区| 日本美女一区二区| 一区二区三区在线视频观看58| 在线看国产一区二区| 肉丝袜脚交视频一区二区| 欧美r级在线观看| av影院午夜一区| 亚洲h动漫在线| 久久久不卡网国产精品二区 | 日本道色综合久久| 日本午夜一区二区| 中文字幕欧美国产| 欧美在线短视频| 狠狠狠色丁香婷婷综合激情| 国产精品麻豆欧美日韩ww| 欧美丝袜丝交足nylons图片| 久久99精品久久久久久| 亚洲欧洲成人av每日更新| 欧美精品在线视频| 成人午夜私人影院| 日本成人在线看| 亚洲视频免费观看| 欧美电影免费提供在线观看| 色哟哟国产精品免费观看| 久久国产尿小便嘘嘘尿| 亚洲精品国久久99热| www激情久久| 欧美日韩一区在线| 不卡av在线免费观看| 日本在线观看不卡视频| 国产精品白丝av| 亚洲狠狠丁香婷婷综合久久久| 精品国精品国产| 欧美揉bbbbb揉bbbbb| 成人精品亚洲人成在线| 蜜臀va亚洲va欧美va天堂| 亚洲人成小说网站色在线| 久久一留热品黄| 欧美一区二区成人6969| 在线精品视频免费观看| 成人在线一区二区三区| 六月婷婷色综合| 亚洲大片一区二区三区| 亚洲人成亚洲人成在线观看图片| 日韩欧美第一区| 欧美亚洲愉拍一区二区| 国产一区二区伦理片| 一个色综合av| 久久久久久久综合色一本| 免费在线欧美视频| 亚洲三级电影网站| 欧美精品一区二区不卡 | 久久亚洲捆绑美女| 欧美在线免费观看亚洲| 粉嫩一区二区三区性色av| 丝袜亚洲另类丝袜在线| 成人欧美一区二区三区在线播放| 欧美三级视频在线| 色婷婷综合久久久久中文| 国产成人一区在线| 美女精品自拍一二三四| 亚洲国产日韩a在线播放性色| 国产欧美一区二区精品忘忧草| 在线不卡中文字幕| 91福利区一区二区三区| 国产成人精品综合在线观看| 亚洲成人中文在线| 亚洲色图色小说| 中文字幕国产一区二区| 精品精品欲导航| 91精品免费观看| 欧美日韩精品一区二区| 色中色一区二区| 91在线无精精品入口| 国产在线精品一区二区不卡了| 日韩av电影免费观看高清完整版| 亚洲欧美偷拍卡通变态| 国产精品久久影院| 国产精品美女视频| 国产精品天干天干在线综合| 婷婷开心激情综合| 国产欧美精品一区二区三区四区| 精品美女一区二区| 久久久久久麻豆| 亚洲色图视频免费播放| 亚洲日本在线天堂| 天天综合色天天综合| 亚洲丶国产丶欧美一区二区三区| 一区二区激情小说| 亚洲精品高清视频在线观看| 亚洲视频免费在线| 亚洲444eee在线观看| 亚洲成av人片一区二区梦乃| 日韩精品色哟哟| 国产传媒欧美日韩成人| 成人国产精品免费网站| 国产精品综合视频| 免费高清不卡av| 国产精品资源站在线| 粉嫩欧美一区二区三区高清影视 | 亚洲国产精品成人综合色在线婷婷 | 三级成人在线视频| 青草国产精品久久久久久| 免费日韩伦理电影| 国产乱码精品一区二区三区五月婷 | 国产精品久久二区二区| 中文字幕一区二区三区在线观看| 最新国产の精品合集bt伙计| 国产欧美日韩三区| 亚洲成av人片一区二区三区| 美国十次了思思久久精品导航| 麻豆传媒一区二区三区| 国产传媒日韩欧美成人| 91成人在线观看喷潮| 91精品一区二区三区久久久久久| 欧美一区二区播放| 自拍偷在线精品自拍偷无码专区| 亚洲一区二区三区四区中文字幕| 日韩激情一二三区| 国产成人午夜高潮毛片| 一本大道久久a久久综合| 911精品国产一区二区在线| 欧美美女黄视频| 亚洲摸摸操操av| 日本欧美一区二区三区乱码| 国产一区二区0| 欧美午夜在线一二页| 精品噜噜噜噜久久久久久久久试看 | 国产综合久久久久影院| 色综合久久久网| 久久精品欧美一区二区三区不卡| 亚洲婷婷综合色高清在线| 国产一区二区成人久久免费影院| 在线欧美日韩精品| 国产日韩欧美a| 日韩激情一区二区| 一本色道亚洲精品aⅴ| 精品理论电影在线| 毛片av一区二区三区| 中文字幕欧美区| 国内精品久久久久影院一蜜桃| 91网站在线观看视频| 中文字幕免费在线观看视频一区| 亚洲自拍欧美精品| 色乱码一区二区三区88 | 欧美日韩在线播放三区四区| 精品国产亚洲一区二区三区在线观看| 亚洲第一av色| 色婷婷一区二区| 日韩毛片精品高清免费| 韩国精品主播一区二区在线观看| 欧美自拍偷拍一区| 久久久久久久久久久99999| 奇米精品一区二区三区在线观看一| 91免费在线播放| 国产精品美女一区二区在线观看| 精品中文字幕一区二区小辣椒| 欧美系列一区二区| 亚洲chinese男男1069| 在线观看日韩精品| 中文字幕人成不卡一区| 国产成人亚洲综合色影视| 日韩欧美在线一区二区三区| 亚洲黄色片在线观看| 欧美日韩在线不卡| 亚洲自拍偷拍麻豆| 91丨九色丨黑人外教| 国产精品色婷婷久久58| 日韩**一区毛片| 久久这里只有精品6| 国内外成人在线视频| 日韩欧美专区在线| 美脚の诱脚舐め脚责91 | 韩国精品久久久| 欧美α欧美αv大片| 美国十次综合导航| 日本精品一区二区三区高清| 亚洲激情图片一区| 在线观看不卡视频| 亚洲成人综合在线| 56国语精品自产拍在线观看| 一区二区三区在线视频播放| 91精品国产免费| 久久99精品国产.久久久久久| 欧美一区二区免费| 久久精品二区亚洲w码|