Java >> Tutoriel Java >  >> Tag >> ArrayList

Comment synchroniser ArrayList en Java ?

Synchroniser ArrayList

En java, il existe deux manières de synchroniser ArrayList,

  1. Avec l'aide de la méthode synchronizedList()
  2. Avec l'aide de la méthode CopyOnWriteArrayList

1) Synchroniser ArrayList à l'aide de la méthode synchronizedList(List list)

  • Cette méthode est disponible dans le package java.util.
  • Avec l'aide de cette méthode, nous pouvons synchroniser ArrayList.
  • C'est une méthode statique, elle est également accessible avec le nom de la classe. (c'est-à-dire que si nous essayons d'accéder avec l'objet de classe, dans ce cas, nous n'obtiendrons aucune erreur ou exception).
  • Cette méthode ne lève aucune exception lors de la synchronisation d'une ArrayList.

Syntaxe :

    public static List synchronizedList(List list);

Paramètre(s) :

  • list – représente la ArrayList à lier dans une liste synchronisée.

Valeur renvoyée :

Le type de retour de cette méthode est List, elle retourne la vue synchronisée de la liste donnée.

Exemple :

// Java program to demonstrate the example of 
// synchronizing an ArrayList by using synchronizedList() method

import java.util.*;

public class SynchronizeArrayList {
    public static void main(String[] args) {
        // ArrayList Declaration
        ArrayList al = new ArrayList();

        // By using add() method to add few elements in 
        //ArrayList
        al.add(10);
        al.add(20);
        al.add(30);
        al.add(40);
        al.add(50);

        // Display ArrayList 
        System.out.print("Display ArrayList : " + " ");
        System.out.println(al);

        Collections.synchronizedList(al);

        synchronized(al) {
            Iterator itr = al.iterator();
            System.out.println("Display synchronized ArrayList:");
            while (itr.hasNext())
                System.out.println(itr.next() + " ");
        }
    }
}

Sortie

Display ArrayList :  [10, 20, 30, 40, 50]
Display synchronized ArrayList:
10 
20 
30 
40 
50

2) Synchroniser ArrayList à l'aide de CopyOnWriteArrayList

  • CopyOnWriteArrayList est une classe thread-safe synchronisée.
  • Dans le cas de CopyOnWriteArrayList, plusieurs threads sont autorisés à travailler.
  • Cela fonctionne sur différentes copies clonées pour les opérations de mise à jour.
  • Pendant un thread itérant l'objet CopyOnWriteArrayList et en même temps un autre thread peut modifier car il fonctionne sur la copie clonée séparée.

Exemple :

// Java program to demonstrate the example of 
// synchronizing an ArrayList by using CopyOnWriteArrayList

import java.util.*;
import java.util.concurrent.*;

public class SynchronizeArrayList {
    public static void main(String[] args) {
        // CopyOnWriteArrayList Declaration
        CopyOnWriteArrayList < Integer > cowal = new CopyOnWriteArrayList < Integer > ();

        // By using add() method to add few elements in 
        // CopyOnWriteArrayList
        cowal.add(10);
        cowal.add(20);
        cowal.add(30);
        cowal.add(40);
        cowal.add(50);

        // Display ArrayList 
        System.out.print("Display CopyOnWriteArrayList : " + " ");
        System.out.println(cowal);

        // Iterate ArrayList using iterator()
        Iterator < Integer > itr = cowal.iterator();

        System.out.println("Display synchronized ArrayList:");
        while (itr.hasNext())
            System.out.println(itr.next() + " ");
    }
}

Sortie

Display CopyOnWriteArrayList :  [10, 20, 30, 40, 50]
Display synchronized ArrayList:
10 
20 
30 
40 
50 

Balise Java