Java 集合 同步ArrayList

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

显式同步有两种方法:

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

示例 1:用于同步ArrayListCollections.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:
Pen
NoteBook
Ink

方法 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:
Pen
NoteBook
Ink

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程