在我们写程序的过程中,往往会经常遇到一些常见的功能。而这些功能或效果往往也是相似的,解决方案也相似。下面是我在写代码的过程中总结的一些有用的代码片段。
1、在多线程环境中操作同一个Collection,会出现线程同步的问题,甚至有时候会抛出异常
解决方案:使用Collections.synchronizeMap(),并使用如下代码访问或者删除元素
1 public class ConcurrentMap { 2 private Map<String, String> map = Collections.synchronizedMap(new HashMap<>()); 3 4 public synchronized void add(String key, String value) { 5 map.put(key, value); 6 } 7 8 public synchronized void remove(String key) { 9 Set<Map.Entry<String, String>> entries = map.entrySet(); 10 Iterator<Map.Entry<String, String>> it = entries.iterator(); 11 while (it.hasNext()) { 12 Map.Entry<String, String> entry = it.next(); 13 if (key.equals(entry.getKey())) { 14 it.remove(); 15 } 16 } 17 } 18 19 public synchronized void remove2(String key) { 20 Set<Map.Entry<String, String>> entries = map.entrySet(); 21 entries.removeIf(entry -> key.equals(entry.getKey())); 22 } 23 }