Java Program to Synchronize an ArrayList

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:

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 say syncAl 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.