使ArrayList线程安全
最近被问到ArrayList线程的问题,我们知道ArrayList源码里面方法不同于vector
是没有 synchronized关键字修饰的所以这就导致 ArrayList的线程不安全。
那我们如何解决ArrayList线程不安全的问题呢?
一、使用synchronized关键字
1.给方法名加上synchronized,如 public synchronized void method(){}
2.在new对象的时候加 new synchronized ArrayList();
3.ArrayList arraylist= new arraylist();
synchronized(arraylist){}
二、使用Collections.synchronizedList();
这个也是面试官在提问的时候,希望你能回答出来的问题。
假如代码如下
List<Map<String,Object>> data=new ArrayList<Map<String,Object>>();
这样的你线程是不安全的 这是可以解决安全问题 可以加上Collections.synchronizedList()
代码可以改为List<Map<String,Object>> data=Collections.synchronizedList(new ArrayList<Map<String,Object>>());
这样就可以了,详细的大家可以参考一下api文档。里面有详细的解析。
ed