/**
* 从指定节点Element node开始,递归遍历其所有子节点
*/
static Map<String, Object> map2 = new HashMap<String,Object>();
public static Map<String, Object> getNodes(Element node) {
System.out.println("当前节点:" + node.getName() + ":" + node.getTextTrim());// 当前节点名称
map2.put(node.getName(), node.getTextTrim());
// 递归遍历当前节点所有的子节点
List<Element> listElement = node.elements();// 所有一级子节点的list
for (final Element e : listElement) {// 遍历所有一级子节点
getNodes(e);// 递归
}
return map2;
}
并发的时候这个map2
怎么处理?加上volatile
关键字可以吗?
static volatile Map<String, Object> map2 = new HashMap<String,Object>();
需要对getNodes方法进行synchronized, 因为map2创建了后地址不再改变(不再new), volatile关键字是不需要的. 但你的方法直接把map2返回了,如果或其它调用的地方对map2进行修改, 也会引起并发的问题, 所以最好返回
https://docs.oracle.com/javas...