Maison  >  Article  >  Java  >  Concurrence de threads en Java

Concurrence de threads en Java

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 11:05:30851parcourir

Thread Concurrency In Java

Thread Concurrency ou Multithreading en Java avancé permet à plusieurs threads de s'exécuter simultanément, améliorant ainsi les performances et la réactivité dans les applications complexes. Voici une présentation concise de ses concepts et utilités clés.

Principales fonctionnalités du multithreading en Java :

  1. Créer des fils de discussion.
  2. Gestion des threads avec les exécuteurs
  3. Utilitaires de concurrence
  4. Framework Fork/Join
  5. Programmation asynchrone avec un avenir complétable

1️⃣ Création de fils de discussion.

  • Extension du fil : créez un nouveau fil de discussion en remplaçant la méthode run().

  • Implémentation de Runnable : transmettez une instance Runnable à un objet Thread.

  • Implémentation de Callable : contrairement à Runnable, Callable permet aux threads de renvoyer un résultat et de gérer les exceptions vérifiées.

2️⃣ Gestion des threads avec les exécuteurs.

  • Executor Framework de Java (java.util.concurrent.ExecutorService) gère les pools de threads, permettant une gestion efficace des tâches.

  • Les exécuteurs comme FixedThreadPool et CachedThreadPool créent un pool de threads réutilisables, les gérant efficacement pour réduire la surcharge liée à la création de nouveaux threads.

3️⃣ Utilitaires de concurrence

  • Verrous : les mécanismes de verrouillage avancés tels que ReentrantLock offrent plus de flexibilité que les méthodes synchronisées, permettant des verrouillages temporisés et disruptibles.

  • Variables atomiques : le package java.util.concurrent.atomic comprend des classes atomiques (AtomicInteger, AtomicLong) qui offrent des threads sans verrouillage
    opérations sûres.

  • Synchroniseurs : incluent des utilitaires tels que :
    CountDownLatch : permet à un thread d'attendre que les autres threads se terminent
    tâches.
    CyclicBarrier : synchronise un nombre fixe de threads sur un
    commun point barrière.
    Sémaphore : contrôle l'accès aux ressources en autorisant un numéro spécifique
    de threads simultanés.

4️⃣ Cadre Fork/Join

  • 1. Pour les tâches diviser pour régner, ForkJoinPool divise une tâche en sous-tâches plus petites qui sont traitées en parallèle, ce qui est particulièrement utile dans les algorithmes récursifs.

5️⃣ Programmation asynchrone avec un avenir complétable

  • CompletableFuture permet une programmation asynchrone et non bloquante, permettant d'enchaîner et de combiner des tâches pour des flux de travail complexes.

Utilisation d'un exemple de fil de discussion

La classe principale appelle 2 fils de discussion différents

public class ThreadConcurrence {
    public static void main(String[] args) {
        // There is 2 type you have to call thread method
                //1- Extend Thread class
                //1- Implements Runnable class
        // why Implement concept is introduce here
                // because in java multiple thread dose not support that's so why implement class will introduce
                // ex- when u extend (inherit) base call, then at that time this call can not extend another Thread class.
        int n = 10;
        for (int i = 0; i < n; i++) {

            // in case of extend(inherit) Thread class
            Thread1 t1 = new Thread1();
            t1.start();

            // in case of implement Runnable class
            Thread t2 =new Thread(new Thread2());
            t2.start();
        }
    }
}

Thread1--(étend le fil)

public class Thread1 extends Thread{
    //If you are extend Thread class then you  most be used run()
    // Because when you start a thread then run() automatically call and run
    public void run(){
        try {
            System.out.println("Thread1 is running now....");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Thread2--(implémente Runnable)

public class Thread2 implements Runnable {
    //IF you are implement thread Then run() will be executed.
    // Because when you start a thread then run() automatically call and run
    public void run(){
        try {
            System.out.println("Thread2 is running.......");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

Conclusion :

En exploitant ces outils et frameworks, le multithreading Java avancé permet de créer des applications évolutives et hautes performances capables de gérer des tâches simultanées de manière transparente.

Pour plus d'informations, n'hésitez pas à mentionner votre Linkedin et GitHub pour des exemples détaillés et des exemples de code ! Faites-moi savoir si vous souhaitez des ajustements spécifiques.

Linkedin : https://www.linkedin.com/in/pravanjan-17p/

GitHub : https://github.com/Prabhanjan-17p

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