List list = Collections.synchronizedList(new ArrayList());
      ...
  synchronized(list) {
     list.add("abc");
  }这段代码中,将集合通过.synchronizedList()方法转化成同步集合有什么其他的作用呢
感觉不用这个方法,使用下方的同步代码块,也能达到同样的效果了
  synchronized(list) {
     list.add("abc");
  }

解决方案 »

  1.   

     List list = Collections.synchronizedList(new ArrayList());只是将ArrayList实现了内部线程安全,和vector一样了。但外部多线程的时候并不安全。比如在多个线程同时使用list 的时候,其他线程对list的add或者remove操作,对当前线程的操作会有不可预知的结果的。synchronized就能保证外部线程安全
      

  2.   

    ArrayList同一时间允许多个线程一起进行访问 效率较高,但是可能会出现并发错误.但是从jdk5.0开始 集合的工具类(Collections)提供了一个方法(snychronizedList) 可以将线程不安全的ArrayList变成线程安全的集合对象