使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

猜你喜欢

转载自blog.csdn.net/CHEN_zB/article/details/80870708