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 del método Java ArrayList remove (Object obj)

Por avivcas

Deja una respuesta

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