代码之家  ›  专栏  ›  技术社区  ›  phunehehe

java.util.Collections中同步…方法的可用性

  •  3
  • phunehehe  · 技术社区  · 14 年前

    我在看静态方法

    Collections.synchronizedList(List<T> list)
    

    当用户在返回的列表上进行迭代时,必须手动同步该列表。。。

    2 回复  |  直到 14 年前
        1
  •  7
  •   Turing    14 年前

    你为什么要使用

    Collections.synchronizedList(List<T> list)  
    

    这是因为除了迭代器以外的所有方法都是使用列表本身作为互斥体进行同步的,所以您不必这样做

    synchronized(list) {
        list.add(type);
    }   
    

    相反,你可以这样做

    list.add(type);  
    

    它将是线程安全的。

    唯一不同步的方法是迭代列表时。列表迭代器不能以同步方式返回,因为您将在之后对其进行迭代,这就是为什么需要手动同步列表。因此,总之,您只需在迭代列表时同步列表,其他一切都不必同步。

        2
  •  1
  •   Rahul    14 年前

    这个 java collections tutorial 这就是原因。基本上,每次迭代都会对底层集合进行多次调用。这些调用不能被原子化为单个“事务”。