Comment synchroniser ArrayList en Java ?
Synchroniser ArrayList
En java, il existe deux manières de synchroniser ArrayList,
- Avec l'aide de la méthode synchronizedList()
- 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