Here we are going to share two common as well as efficient ways to synchronize ArrayList in Java.
Using Collections.synchronizedList():
The Collections.synchronizedList() method returns a thread-safe ArrayList backed by a specific list.
Source code:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class SyncronizeArrayList {
public static void main(String[] args) {
List languageList = new ArrayList<>(Arrays.asList("Java", "Python", "HTML", "CSS"));
// Synchronizing ArrayList in Java
languageList = Collections.synchronizedList(languageList);
// we must use synchronize block to avoid non-deterministic behavior
synchronized (languageList) {
Iterator iterator = languageList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
}
Output:
run:
Java
Python
HTML
CSS
BUILD SUCCESSFUL (total time: 12 seconds)
Initializing thread-safe list:
Rather than synchronizing an ArrayList, you can also declare or initialize a thread-safe list.
Source code:
import java.util.Arrays;
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;
public class SyncronizeArrayList {
public static void main(String[] args) {
// Initializing a thread-safe Arraylist.
CopyOnWriteArrayList list =
new CopyOnWriteArrayList(Arrays.asList("John", "Sara", "Ali", "Sam"));
System.out.println("Following are elements of synchronized ArrayList: ");
// Using iterator for Iterating on the synchronized ArrayList.
Iterator itr = list.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
Output:
run:
Following are elements of synchronized ArrayList:
John
Sara
Ali
Sam
BUILD SUCCESSFUL (total time: 2 seconds)