Java 集合 同步ArrayList

来源:这里教程网 时间:2026-02-17 20:13:09 作者:

当我们在Vector vs ArrayList上共享教程时,我们已经讨论了一些关于同步的问题。我们知道ArrayList是非同步的,不应在没有显式同步的多线程环境中使用。这篇文章将讨论如何在 Java 中同步ArrayList。

显式同步有两种方法:

    使用Collections.synchronizedList()方法使用ArrayList的线程安全变体:CopyOnWriteArrayList

示例 1:用于同步ArrayList的Collections.synchronizedList()方法

在这个例子中,我们使用 Collections.synchronizedList()方法。这里要注意的重点是迭代器应该在这种类型的同步中处于同步块中,如下例所示。

package beginnersbook.com;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Collections;public class Details {   public static void main(String a[]){       List<String> syncal =          Collections.synchronizedList(new ArrayList<String>());       //Adding elements to synchronized ArrayList       syncal.add("Pen");       syncal.add("NoteBook");       syncal.add("Ink");       System.out.println("Iterating synchronized ArrayList:");       synchronized(syncal) {       Iterator<String> iterator = syncal.iterator();        while (iterator.hasNext())          System.out.println(iterator.next());       }   }}

输出:

Iterating synchronized ArrayList:PenNoteBookInk

方法 2:使用CopyOnWriteArrayList

CopyOnWriteArrayList 是ArrayList的线程安全变体。

package beginnersbook.com;import java.util.concurrent.CopyOnWriteArrayList;import java.util.Iterator;public class Details { public static void main(String a[]){    CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();    //Adding elements to synchronized ArrayList    al.add("Pen");    al.add("NoteBook");    al.add("Ink");    System.out.println("Displaying synchronized ArrayList Elements:");    //Synchronized block is not required in this method    Iterator<String> iterator = al.iterator();     while (iterator.hasNext())       System.out.println(iterator.next());  }}

输出:

Displaying synchronized ArrayList Elements:PenNoteBookInk

相关推荐