Ya hablamos un poco sobre la sincronización cuando compartimos el tutorial Vector vs ArrayList. Como sabemos, ArrayList no está sincronizado y no debe usarse en entornos multiproceso sin sincronización explícita. Esta publicación es para discutir cómo sincronizar ArrayList en Java.

Hay dos formas de sincronizar explícitamente:

  1. Usando el método Collections.synchronizedList ()
  2. Usando la variante segura para subprocesos de ArrayList: CopyOnWriteArrayList

Ejemplo 1: método Collections.synchronizedList () para la sincronización ArrayList

En este ejemplo estamos usando Collections.synchronizedList () método. El punto importante a tener en cuenta aquí es que el iterador debe estar en el bloque sincronizado en este tipo de sincronización, como se muestra en el ejemplo siguiente.

package beginnersbook.com;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Collections;

public class Details {

   public static void main(String a[]){
       List<String> syncal = 
         Collections.synchronizedList(new ArrayList<String>());

       //Adding elements to synchronized ArrayList
       syncal.add("Pen");
       syncal.add("NoteBook");
       syncal.add("Ink");

       System.out.println("Iterating synchronized ArrayList:");
       synchronized(syncal) {
       Iterator<String> iterator = syncal.iterator(); 
       while (iterator.hasNext())
          System.out.println(iterator.next());
       }
   }
}

Producción:

Iterating synchronized ArrayList:
Pen
NoteBook
Ink

Método 2: usar CopyOnWriteArrayList

CopyOnWriteArrayList es una variante segura para subprocesos de ArrayList.

package beginnersbook.com;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.Iterator;

public class Details {

 public static void main(String a[]){
    CopyOnWriteArrayList<String> al = new CopyOnWriteArrayList<String>();

    //Adding elements to synchronized ArrayList
    al.add("Pen");
    al.add("NoteBook");
    al.add("Ink");

    System.out.println("Displaying synchronized ArrayList Elements:");
    //Synchronized block is not required in this method
    Iterator<String> iterator = al.iterator(); 
    while (iterator.hasNext())
       System.out.println(iterator.next());
  }
}

Producción:

Displaying synchronized ArrayList Elements:
Pen
NoteBook
Ink
leer  Ejemplo de iterador TreeMap - Java

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *