如何在Java中同步ArrayList?
同步ArrayList
在Java中,有两种同步ArrayList的方法,
借助synchronizedList()方法
借助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