在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  Linux/ 請問java并發(fā)編程中這種變量怎么處理?如下圖

請問java并發(fā)編程中這種變量怎么處理?如下圖

    /** 
     * 從指定節(jié)點Element node開始,遞歸遍歷其所有子節(jié)點 
     */  
    static Map<String, Object> map2 = new HashMap<String,Object>();
    public static Map<String, Object> getNodes(Element node) {  
        System.out.println("當前節(jié)點:" + node.getName() + ":" + node.getTextTrim());// 當前節(jié)點名稱  
        map2.put(node.getName(), node.getTextTrim());
        // 遞歸遍歷當前節(jié)點所有的子節(jié)點  
        List<Element> listElement = node.elements();// 所有一級子節(jié)點的list  
        for (final Element e : listElement) {// 遍歷所有一級子節(jié)點  
            getNodes(e);// 遞歸  
        }  
        return map2;
    }

并發(fā)的時候這個map2怎么處理?加上volatile關(guān)鍵字可以嗎?

static volatile Map<String, Object> map2 = new HashMap<String,Object>();
回答
編輯回答
尛曖昧

使用ConcurrentHashMap:new ConcurrentHashMap<String,Object>();
或者Collections的靜態(tài)內(nèi)部類synchronizedMap:Collections.synchronizedMap都可以

2017年12月1日 10:48
編輯回答
局外人

需要對getNodes方法進行synchronized, 因為map2創(chuàng)建了后地址不再改變(不再new), volatile關(guān)鍵字是不需要的. 但你的方法直接把map2返回了,如果或其它調(diào)用的地方對map2進行修改, 也會引起并發(fā)的問題, 所以最好返回

return Collections.synchronizedMap(your_map);

https://docs.oracle.com/javas...

2017年4月11日 13:35