Différences entre la collecte synchronisée et la collecte simultanée en Java
Collection synchronisée vs collecte simultanée en Java
Ici, nous verrons comment Synchronized Collection diffère de Concurrent Collection en Java ?
Collecte synchronisée
- Maintenant, nous allons voir ce qu'est la synchronisation ? Ici, synchroniser signifie qu'un seul thread est autorisé à opérer sur un objet à la fois ou, en d'autres termes, l'objet (qui est synchronisé) ne peut pas être modifié simultanément par plusieurs threads.
- Collection synchronisée peut être modifié par un thread à la fois (c'est-à-dire qu'il n'est pas possible de modifier ou d'accéder à la collection synchronisée par plusieurs threads simultanément).
- Collection synchronisée a des performances inférieures à celles de Concurrent Collection car à la fois un seul thread est autorisé à opérer sur un objet, ce qui augmente le temps d'attente des threads.
- Collection synchronisée acquiert le verrou sur l'ensemble de l'objet Collection qui fournit la sécurité des threads.
- Carte synchronisée est une classe interne statique de la classe Collections qui est disponible dans java.util.Collections.
- Dans SynchronizedMap il acquiert le verrou sur l'ensemble de l'objet Map et encapsule toutes les méthodes de l'interface Map avec le mot-clé synchronisé.
- Carte synchronisée peut autoriser les clés nulles et les valeurs nulles dépendent de la vraie classe Collections.
Exemple :
import java.util.*; class SynchronizedCollectionClass { public static void main(String[] args) { try { Set set = new HashSet(); set.add(10); set.add(20); set.add(30); set.add(40); set.add(50); System.out.println("Current Set is :" + set); Collection collection = Collections.synchronizedCollection(set); System.out.println("Synchronized Collection is :" + set); } catch (IndexOutOfBoundsException ex) { System.out.println("Exception :" + ex.getMessage()); } } }
Sortie
E:\Programs>javac SynchronizedCollectionClass.java E:\Programs>java SynchronizedCollectionClass Current Set is :[50, 20, 40, 10, 30] Synchronized Collection is :[50, 20, 40, 10, 30]
Ici, nous verrons comment Concurrent Collection diffère de Synchronized Collection en Java ?
PublicitéCollection simultanée
- Maintenant, nous allons voir ce qu'est Concurrent ? Ici, simultané signifie que seuls plusieurs threads sont autorisés à opérer sur un objet à la fois ou, en d'autres termes, l'objet (qui est concurrent) peut être modifié simultanément par plusieurs threads.
- Collection simultanée peut être modifié par plusieurs threads à la fois (c'est-à-dire qu'il est possible de modifier ou d'accéder à Concurrent Collection par plusieurs threads simultanément).
- Collection simultanée est plus performant que la Collecte synchronisée car à la fois plusieurs threads sont autorisés à opérer sur un objet, ce qui réduit le temps d'attente des threads.
- Plusieurs threads peuvent effectuer des opérations de lecture-écriture simultanément, tout en assurant la sécurité des threads.
- ConcurrentHashMap est une classe introduite dans Java 5 qui est disponible dans le package java.util.
- ConcurrentHashMap divise l'objet Map en différentes parties et chaque thread acquiert le verrou sur chaque partie.
- Comme nous savons que le niveau de simultanéité par défaut est 16, cela signifie que 16 threads au maximum sont autorisés à accéder simultanément à un objet par défaut et nous pouvons augmenter et diminuer le niveau de simultanéité si nous le souhaitons.
- ConcurrentHashMap n'autorise pas les clés nulles et les valeurs nulles.
Exemple :
// We will see in a program why Concurrent concept is required import java.util.*; class ConcurrentClass extends Thread { static LinkedList ll = new LinkedList(); public void run() { try { Thread.sleep(3000); } catch (InterruptedException e) { System.out.println("ConcurrentClass" + " will add element"); } // By using add() method to add an element in Concurrent Class Thread ll.add("Java"); } public static void main(String[] args) throws InterruptedException { ll.add("C"); ll.add("C++"); ll.add("Ruby"); ll.add("Python"); // Creating an instance of ConcurrentClass and it will modify ConcurrentClass cc = new ConcurrentClass(); cc.start(); // Iterating LinkedList Iterator iterator = ll.iterator(); while (iterator.hasNext()) { String str = (String) iterator.next(); System.out.println(str); Thread.sleep(8000); } System.out.println(ll); } }
Sortie
E:\Programs>javac ConcurrentClass.java E:\Programs>java ConcurrentClass C Exception in thread "main" java.util.ConcurrentModificationException at java.util.LinkedList$ListItr.checkForComodification (LinkedList.java:953) at java.util.LinkedList$ListItr.next(LinkedList.java:886) at ConcurrentClass.main(ConcurrentClass.java:34)