Maison  >  Article  >  Java  >  Connaissance de base de la programmation simultanée Java

Connaissance de base de la programmation simultanée Java

王林
王林original
2023-06-15 23:40:38890parcourir

Avec le développement continu d'Internet, le langage Java est devenu un outil important pour les développeurs. Dans le développement Java, il existe de plus en plus de situations impliquant une programmation concurrente. Pour cette raison, il est indispensable de maîtriser les connaissances de base de la programmation concurrente Java.

Ce qui suit est une introduction détaillée aux bases de la programmation simultanée en Java.

  1. Threads

Un thread est la plus petite unité avec laquelle le système d'exploitation peut effectuer la planification des opérations, c'est-à-dire le chemin d'exécution. En Java, le multithreading est un moyen courant d'implémenter la programmation simultanée.

En Java, utilisez la classe Thread pour créer et démarrer de nouveaux threads. Lors du démarrage d'un thread, vous pouvez spécifier les tâches à effectuer par le thread en remplaçant la méthode run() de la classe Thread. Par exemple :

class RunnableThread implements Runnable {
    public void run() {
        // 线程执行任务
    }
}

public class Main {
    public static void main(String[] args) {
        RunnableThread runnable = new RunnableThread();
        Thread thread = new Thread(runnable);
        thread.start();
    }
}

Dans le code ci-dessus, une classe RunnableThread est créée qui implémente l'interface Runnable, et un nouveau thread est créé dans la fonction principale et démarré. La tâche du nouveau thread est définie par la méthode run() remplacée.

  1. Synchronisation

Dans la programmation multithread, les situations impliquant des ressources partagées doivent être synchronisées pour garantir la cohérence et l'exactitude des données. Java fournit le mot-clé synchronisé pour implémenter les verrous de synchronisation. Voici plusieurs méthodes de synchronisation courantes :

  • méthode synchronisée

La méthode synchronisée fait référence à l'utilisation du mot-clé synchronisé dans la déclaration de la méthode pour faire de la méthode une méthode synchronisée. Comme indiqué ci-dessous :

public synchronized void method(){
    // 同步内容
}

La méthode method() dans le code ci-dessus est une méthode synchrone, et les autres threads ne sont autorisés à s'exécuter qu'une fois la méthode terminée.

  • bloc de code synchronisé

En plus d'utiliser le mot-clé synchronisé sur les déclarations de méthode, vous pouvez également utiliser des blocs de code synchronisés pour réaliser la synchronisation entre les threads. Voici un exemple d'utilisation d'un bloc de code synchronisé :

public void method(){
    synchronized (this){
        // 同步代码块
    }
}

Dans le code ci-dessus, un bloc de code synchronisé est utilisé, et cela entre parenthèses signifie verrouiller l'objet auquel appartient la méthode.

  1. volatile

Le mot-clé volatile en Java est un mécanisme de synchronisation léger qui garantit la visibilité des threads et un certain degré d'ordre. Lorsqu'une variable est modifiée de manière volatile, la dernière valeur est lue de la mémoire à chaque fois que la variable est lue. Par exemple :

public volatile boolean flag = false;

La variable flag dans le code ci-dessus est déclarée comme de type volatile, indiquant que sa valeur peut être modifiée par plusieurs threads. Dans un environnement multithread, l'utilisation du mot-clé volatile peut garantir la cohérence de l'accès des threads à la variable.

  1. Thread Pool

Thread Pool est un outil de programmation multi-thread très pratique en Java. Il peut réduire le coût de création et de destruction des threads et peut contrôler efficacement le nombre de threads pour éviter le gaspillage de ressources système causé par. trop de fils. En Java, les pools de threads sont fournis via le framework Executor.

Ce qui suit est un exemple d'utilisation du framework Executor pour créer un pool de threads :

ExecutorService executor = Executors.newFixedThreadPool(5);
for(int i = 0; i < 10; i++){
    executor.execute(new RunnableThread());
}
executor.shutdown();

Dans le code ci-dessus, un pool de threads avec un nombre fixe de threads de 5 est créé, puis 10 tâches sont soumises au pool de threads. pour l'exécution. Enfin, utilisez la méthode shutdown() pour fermer le pool de threads.

  1. Concurrent Collections

Java fournit de nombreuses classes de collection thread-safe, telles que ConcurrentHashMap, ConcurrentLinkedQueue, etc. Ces classes de collection peuvent fournir des opérations de données efficaces et sûres dans des environnements multithread.

Ce qui suit est un exemple d'utilisation de ConcurrentHashMap :

ConcurrentHashMap<String, String> map = new ConcurrentHashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
for(Map.Entry<String, String> entry : map.entrySet()){
    System.out.println(entry.getKey() + ":" + entry.getValue());
}

Dans le code ci-dessus, un ConcurrentHashMap thread-safe est créé, puis deux paires clé-valeur sont insérées et la carte est parcourue.

  1. Locks

Java fournit une variété de méthodes d'implémentation de verrouillage, telles que synchronisé, ReentrantLock, etc. Dans un environnement multithread, les verrous constituent un mécanisme important pour garantir l'exécution synchrone des threads.

Ce qui suit est un exemple d'utilisation de ReentrantLock pour implémenter le verrouillage de synchronisation :

ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
    // 同步代码块
} finally {
    lock.unlock();
}

Dans le code ci-dessus, ReentrantLock est utilisé pour créer un verrou, et le verrou est obtenu via la méthode lock() avant le verrouillage, et le verrou est libéré via la méthode unlock() après l'exécution.

Résumé

La programmation simultanée Java est une technologie complexe et importante. La maîtrise de ses connaissances de base est d'une grande importance pour écrire des programmes multithread efficaces et sûrs. Cet article donne un aperçu des threads, de la synchronisation, des volatiles, des pools de threads, des collections simultanées et des verrous dans la programmation simultanée Java. Je pense que les lecteurs ont une compréhension plus approfondie de la programmation simultanée Java.

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!

Déclaration:
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