- List:
- public static List<String> dataList = Collections.synchronizedList(new ArrayList<String>());
- Map:
- public static Map<String,String> dataMap = new ConcurrentHashMap <String,String>();
这里的线程安全仅仅指的是使用它自身提供的函数, 如:
- dataList.add("数据一");
- dataList.remove("数据二");
我们可不做任何同步, 但如果是非原子操作, 比如:
- if(!dataList.isEmpty()) {
- dataList.add("数据三");
- }
我们很难保证, 在调用了 isEmpty() 之后, add() 之前没有其他线程修改这个 dataList.
所以对于这种情况, 我们需要自己同步:
- public static void addDataList(String dataStr){
- synchronized(dataList) {
- if(!dataList.isEmpty()) {
- dataList.add(dataStr);
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2722139.html