如何在Java中同步ArrayList?

同步ArrayList

在Java中,有两种同步ArrayList的方法,

  1. 借助synchronizedList()方法

  2. 借助CopyOnWriteArrayList <T>方法

1)使用syncedList(列表列表)方法同步ArrayList

  • 此方法在java.util包中可用。

  • 借助此方法,我们可以使ArrayList同步。

  • 这是一个静态方法,也可以使用类名进行访问。(即,如果我们尝试使用类对象进行访问,则不会得到任何错误或异常)。

  • 在同步ArrayList时,此方法不会引发任何异常。

语法:

    public static List synchronizedList(List list);

参数:

  • list –表示要绑定到同步列表中的ArrayList。

返回值:

该方法的返回类型为List,它返回给定列表的同步视图。

示例

//Java程序演示的例子 
//同步ArrayList

import java.util.*;

public class SynchronizeArrayList {
    public static void main(String[] args) {
        //ArrayList---声明
        ArrayList al = new ArrayList();

        //添加一些元素 
        //ArrayList---
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
        al.add(50);

        //显示ArrayList- 
        System.out.print("Display ArrayList : " + " ");
        System.out.println(al);

        Collections.synchronizedList(al);

        synchronized(al) {
            Iterator itr = al.iterator();
            System.out.println("Display synchronized ArrayList:");
            while (itr.hasNext())
                System.out.println(itr.next() + " ");
        }
    }
}

输出结果

Display ArrayList :  [10, 20, 30, 40, 50]
Display synchronized ArrayList:
10 
20 
30 
40 
50

2)使用CopyOnWriteArrayList同步ArrayList

  • CopyOnWriteArrayList是一个同步的线程安全类。

  • 对于CopyOnWriteArrayList,允许多个线程进行处理。

  • 它适用于其他克隆副本以进行更新操作。

  • 在一个线程中迭代CopyOnWriteArrayList对象,同时另一个线程可以修改,因为它可以在单独的克隆副本上工作。

示例

//Java程序演示的例子 
//同步ArrayList

import java.util.*;
import java.util.concurrent.*;

public class SynchronizeArrayList {
    public static void main(String[] args) {
        //CopyOnWriteArrayList声明
        CopyOnWriteArrayList < Integer > cowal = new CopyOnWriteArrayList < Integer > ();

        //添加一些元素 
        //CopyOnWriteArrayList-
        cowal.add(10);
        cowal.add(20);
        cowal.add(30);
        cowal.add(40);
        cowal.add(50);

        //显示ArrayList- 
        System.out.print("Display CopyOnWriteArrayList : " + " ");
        System.out.println(cowal);

        //迭代ArrayList
        Iterator < Integer > itr = cowal.iterator();

        System.out.println("Display synchronized ArrayList:");
        while (itr.hasNext())
            System.out.println(itr.next() + " ");
    }
}

输出结果

Display CopyOnWriteArrayList :  [10, 20, 30, 40, 50]
Display synchronized ArrayList:
10 
20 
30 
40 
50