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
syncAland 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
CopyOnWriteArrayListclass saysyncAland 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.