Maison > Java > javaDidacticiel > Développement Java : comment utiliser des collections simultanées pour traiter des données partagées multithread

Développement Java : comment utiliser des collections simultanées pour traiter des données partagées multithread

WBOY
Libérer: 2023-09-22 08:03:36
original
740 Les gens l'ont consulté

Développement Java : comment utiliser des collections simultanées pour traiter des données partagées multithread

Développement Java : Comment utiliser des collections simultanées pour traiter des données partagées multithread

La programmation multithread est l'une des exigences courantes du développement de logiciels modernes. Dans un environnement multithread, plusieurs threads accédant et exploitant simultanément des données partagées peuvent entraîner une incohérence des données et des conditions de concurrence. Afin de résoudre ces problèmes, Java fournit des classes de collection simultanées qui peuvent nous aider à gérer en toute sécurité les données partagées multithread.

Dans cet article, nous présenterons les classes de collection simultanées couramment utilisées en Java et montrerons comment les utiliser pour gérer des données partagées multithread. Ci-dessous, nous présenterons l'utilisation de base des classes de collection concurrentes et fournirons quelques exemples de code pour illustrer leur utilisation.

  1. ConcurrentHashMap

ConcurrentHashMap est une implémentation de table de hachage thread-safe fournie par Java. Il permet à plusieurs threads de lire et d'écrire des données simultanément sans provoquer d'incohérence des données ou de problèmes de condition de concurrence. Voici un exemple d'utilisation de ConcurrentHashMap pour traiter des données partagées multithread :

import java.util.concurrent.ConcurrentHashMap;

public class ConcurrentHashMapExample {
    private static ConcurrentHashMap<Integer, String> map = new ConcurrentHashMap<>();

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                map.put(i, "value" + i);
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                map.put(i, "new value" + i);
            }
        });

        thread1.start();
        thread2.start();

        thread1.join();
        thread2.join();

        System.out.println("Size of map: " + map.size());
    }
}
Copier après la connexion

Dans cet exemple, nous créons un ConcurrentHashMap et utilisons deux threads pour y insérer 1 000 éléments de données. Grâce à la fonctionnalité de sécurité des threads de ConcurrentHashMap, plusieurs threads peuvent effectuer des opérations de put en même temps sans entraîner de perte de données ou d'incohérence.

  1. CopyOnWriteArrayList

CopyOnWriteArrayList est une implémentation ArrayList thread-safe fournie par Java. Il garantit la sécurité des threads en copiant la liste entière à chaque opération d'écriture. Voici un exemple d'utilisation de CopyOnWriteArrayList pour gérer des données partagées multithread :

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class CopyOnWriteArrayListExample {
    private static List<Integer> list = new CopyOnWriteArrayList<>();

    public static void main(String[] args) throws InterruptedException {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                list.add(i);
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                list.add(i);
            }
        });

        thread1.start();
        thread2.start();

        thread1.join();
        thread2.join();

        System.out.println("Size of list: " + list.size());
    }
}
Copier après la connexion

Dans cet exemple, nous créons une CopyOnWriteArrayList et y ajoutons 1000 éléments à l'aide de deux threads. Semblable à ConcurrentHashMap, la fonctionnalité de sécurité des threads de CopyOnWriteArrayList permet à plusieurs threads d'effectuer des opérations d'ajout en même temps sans entraîner de perte de données ou d'incohérence.

En plus de ConcurrentHashMap et CopyOnWriteArrayList, Java fournit également d'autres classes de collection simultanées, telles que ConcurrentLinkedQueue, BlockingQueue, etc., qui conviennent à différents scénarios de demande. En utilisant ces classes de collection simultanées, nous pouvons facilement gérer les données partagées multithread et éviter les incohérences des données ou les conditions de concurrence.

Pour résumer, traiter des données partagées multithread est une tâche difficile, mais l'utilisation des classes de collection simultanées fournies par Java peut simplifier le processus. Lors de l'écriture d'applications multithread, nous devons utiliser pleinement ces classes de collection simultanées pour garantir la sécurité et la cohérence des données dans un environnement multithread.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal