public static synchronized ConcurrentHashMap<String, String> storeRouterKeys(String bizType, String compIdStr)
   {
     ConcurrentHashMap keys = new ConcurrentHashMap();
     keys.put("BIZ_TYPE", bizType);
     keys.put("COMP_ID", compIdStr);
     return keys;
   }里边用ConcurrentHashMap意义不大吧?可以改成hashmap吧?
 在put之前会不会多个线程导致bizType不一致呢? 如果修改为这样会有问题吗?再进行put之前biztype会不会被修改掉?
ConcurrentHashMap keys = new ConcurrentHashMap();
 public static ConcurrentHashMap<String, String> storeRouterKeys(String bizType, String compIdStr)
   {
     keys.put("BIZ_TYPE", bizType);
     keys.put("COMP_ID", compIdStr);
     return keys;
   } 

解决方案 »

  1.   

    我觉得第一个可以不用ConcurrentHashMap,用HashMap,当然你的返回值也得改一下,因为一方面这个方法进行了同步(这保证了某个时刻只有一个线程在访问这个方法),另一方面这个keys对象是在方法内部创建的(这使得每个线程访问这个方法时都会new一个ConcurrentHashMap对象);第二个应该是有问题的,首先方法没有同步,另外这个keys是对象肯定是全局的static对象(因为你的方法是static的),要知道HashMap可以push相同的key,后面的值会替换前面的值,所以如果另外一个线程在当前线程的keys.put("BIZ_TYPE", bizType);与keys.put("COMP_ID", compIdStr);之间执行 keys.put("BIZ_TYPE","其他值");那么这个Map的BIZ_TYPE对应的值就会被修改为"其他值"。