In this article, we will learn how to synchronize an ArrayList in Java.
Java Program to Synchronize an ArrayList
We know, ArrayList is non-synchronized which means accessing an ArrayList instance from multiple threads is not safe.
There are two ways to synchronize explicitly:
- By Using Collections.synchronizedList() Method
- By Using Thread-Safe Variant of ArrayList: CopyOnWriteArrayList
Method-1: Java Program to Synchronize an ArrayList By Using Collections.synchronizedList() Method
Approach:
- Create a String List say
syncAl
and add elements into it. - Create a synchronized block with unsynchronized list as parameter
- Within the block create Iterator class to iterate over the
syncAl
- Display the synchronized arraylist.
Program:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Collections; public class Main { public static void main(String args[]) { // String ArrayList List<String> syncAl = Collections.synchronizedList(new ArrayList<String>()); //Adding elements to synchronized ArrayList syncAl.add("One"); syncAl.add("Two"); syncAl.add("Three"); // System.out.println("Traversing unsynchronized ArrayList:" + syncAl); System.out.println("Traversing synchronized ArrayList:"); // Synchronized block is required here synchronized(syncAl) { Iterator<String> iterator = syncAl.iterator(); while (iterator.hasNext()) System.out.println(iterator.next()); } } }
Output: Traversing synchronized ArrayList: One Two Three
Method-2: Java Program to Synchronize an ArrayList By Using Thread-Safe Variant of ArrayList: CopyOnWriteArrayList
This is a thread-safe variant of ArrayList. It is found in java.util.concurrent
package. It is a data structure created to be used in a concurrent environment.
Approach:
- Create a
CopyOnWriteArrayList
class saysyncAl
and add elements into it. - Use Iterator class to iterate over the
syncAl
- Display the synchronized arraylist.
Program:
import java.util.concurrent.CopyOnWriteArrayList; import java.util.Iterator; public class Main { public static void main(String args[]) { // String CopyOnWriteArrayList CopyOnWriteArrayList<String> syncAl = new CopyOnWriteArrayList<String>(); //Adding elements to synchronized ArrayList syncAl.add("One"); syncAl.add("Two"); syncAl.add("Three"); System.out.println("Displaying synchronized ArrayList Elements:"); //Here Synchronized block is not required in this method Iterator<String> iterator = syncAl.iterator(); while (iterator.hasNext()) System.out.println(iterator.next()); } }
Displaying synchronized ArrayList Elements: One Two Three
Interested in programming and want to excel in it by choosing the short ways. Then, practicing with the available Java Program list is mandatory.