ArrayList là lớp con của AbstractList dùng để lưu trữ tập hợp phần tử kích thước động. ArrayList tự tăng kích thước khi thêm phần tử và thu nhỏ khi xóa, nên gọi là mảng động hoặc resizable array. ArrayList cho phép trùng lặp và giá trị null.
Có hai cách để đồng bộ hóa ArrayList trong Java:
Phương thức Collections.synchronizedList()
Phương thức synchronizedList() dùng để đồng bộ hóa collection trong Java.
Cú pháp
public static List<T> synchronizedList(List<T> list)
Ví dụ
import java.util.*;
public class SynchronizedListTest {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("IND");
list.add("AUS");
list.add("WI");
list.add("NZ");
list.add("ENG");
List<String> synlist = Collections.synchronizedList(list);
synchronized(synlist) {
Iterator<String> itr = synlist.iterator();
while(itr.hasNext()) {
String str = itr.next();
System.out.println(str);
}
}
}
}
Kết quả
IND AUS WI NZ ENG
CopyOnWriteArrayList
CopyOnWriteArrayList tạo bản sao mảng nền khi sửa đổi. Đây là cách truy cập đồng thời thread-safe cho ArrayList.
Cú pháp
public class CopyOnWriteArrayList<E> extends Object implements List<E>, RandomAccess, Cloneable, Serializable
Ví dụ
import java.util.*;
import java.util.concurrent.*;
public class CopyOnWriteArrayListTest {
public static void main(String[] args) {
CopyOnWriteArrayList list = new CopyOnWriteArrayList();
list.add("Java");
list.add("Scala");
list.add("Python");
list.add("Selenium");
list.add("ServiceNow");
System.out.println("Displaying synchronized ArrayList: ");
Iterator itr = list.iterator();
while(itr.hasNext()) {
String str = itr.next();
System.out.println(str);
}
}
}
Kết quả
Displaying synchronized ArrayList: Java Scala Python Selenium ServiceNow