如何使arraylist 线程安全??今天面试时问到的,不会答!!请各位牛人帮帮忙!谢谢!!

解决方案 »

  1.   

    继承   然后   重写方法 把方法写成synchronized  在重写的方法里调用父类方法不知道arraylist是不是fanl类如果不能继承    那自己写个类  不继承    其他的  步骤和上面一样
      

  2.   

    一楼正解,建议楼主去看看JDK的源码,对你应该有帮助..
      

  3.   

    ArrayList是线程不安全的,轻量级的
    Vector是线程安全的,重量级的    
    其实区别就是一个有Sychronized 一个没有
      

  4.   

    答:很可能面试官期望你的回答是:
    List list = Collections.synchronizedList(new ArrayList());
      

  5.   

    恩,估计他是这个意思,让你用Collections定义list这样就线程安全了
      

  6.   


    正解!  面试官就是考你Collections工具类中这一静态方法
      

  7.   

    List list = Collections.synchronizedList(new ArrayList()); 就能得到一个线程安全的ArrayList了.简单来说就是在add()方法加synchronized. 
      

  8.   

    其实有不少途径可以实现这个想法。2楼的synchronized就挺好。
    还可以用Collections的synchronizedList(List<T> list) 方法来获取该list的同步安全list。
    还可以把list内的元素用同步安全的思想来实现,总之不管怎么样,只要实现了同步安全就行了
      

  9.   

    呵呵  java.util.Collections 里面有个方法叫做synchronizedList(List list)
      

  10.   


    纠结了半天,才想起来。
    如果让我去,估计 over 了
      

  11.   


            public int size() {
        synchronized(mutex) {return c.size();}
            }
    public boolean isEmpty() {
        synchronized(mutex) {return c.isEmpty();}
            }
    public boolean contains(Object o) {
        synchronized(mutex) {return c.contains(o);}
            }Collections.synchronizedList实际上做的工作也很简单.
      

  12.   

    public static <T> List<T> synchronizedList(List<T> list)返回由指定列表支持的同步(线程安全的)列表。为了保证按顺序访问,必须通过返回的列表完成对底层列表的所有访问。
    在返回的列表上进行迭代时,强制用户手工在返回的列表上进行同步:   List list = Collections.synchronizedList(new ArrayList());
          ...
      synchronized(list) {
          Iterator i = list.iterator(); // Must be in synchronized block
          while (i.hasNext())
              foo(i.next());
      }
     不遵从此建议将导致无法确定的行为。 
    如果指定列表是可序列化的,则返回的列表也将是可序列化的。 
    参数:
    list - 被“包装”在同步列表中的列表。 
    返回:
    指定列表的同步视图。还要自己去实现同步的
      

  13.   

    List list = Collections.synchronizedList(new ArrayList()); 
      

  14.   


    arraylist不是fanl类,可以继承。
      

  15.   

    List list = Collections.synchronizedList(new ArrayList());
      

  16.   

    Collections.synchronizedList方法做的事情也挺简单,生成一个静态内部类包装List原有的方法,并加上锁控制,有些方法只是单纯的加锁控制,有的方法则只是在需要同步的地方加锁控制从而增加性能