错误使用:
在静态方法里面实例化了Map
由于多线程调用该方法,会导致死循环?
错误改正:
把方法改成非静态的,调用时使用单例。
public static SignUtils getInstance() { if (instance == null) { synchronized(SignUtils.class) { if (instance == null) instance = new SignUtils(); } } return instance; }
public Map<String, String> paraFilter(Map<String, String> sArray) { Map<String, String> result = new HashMap<String, String>(); if (sArray == null || sArray.size() <= 0) { return result; } for (String key : sArray.keySet()) { String value = sArray.get(key); if (value == null || StringUtils.isEmpty(value) || key.equalsIgnoreCase("sign")) { continue; } result.put(key, value); } return result; }
调用时
Map<String, String> sPara = SignUtils.getInstance().paraFilter(reqMap);
如此便避免了死循环。
建议:使用Map或者List的方法建议不用静态,才能保证集合的时序性。
方法二:
public Map<String, String> paraFilter(Map<String, String> sArray) { Map<String, String> result = new HashMap<String, String>(); synchronized (SignUtil.class) { if (sArray == null || sArray.size() <= 0) { return result; } for (String key : sArray.keySet()) { String value = sArray.get(key); if (value == null || StringUtils.isEmpty(value) || key.equalsIgnoreCase("sign")) { continue; } result.put(key, value); } return result; } }
使用线程同步,这样使用的话调用该方法的线程会形成一个队列,效率会降低,不建议使用。
-----欢迎指出不足之处,谢谢。