Table des matières
Comment implémenter le multi-threading
Comment l'implémenter dans la sécurité des threads Java
Méthode Join()
wait()
notify()
notifyAll()
Maison Java javaDidacticiel Implémentation multithread et sécurité des threads dans le développement Java

Implémentation multithread et sécurité des threads dans le développement Java

Jul 23, 2018 am 09:36 AM
java多线程 java开发

Comment implémenter le multi-threading

● Héritez de la classe Thread pour créer une classe de thread et remplacez la méthode run La méthode run représente les tâches qui. le thread doit se terminer. Appelez Start() de l'objet thread pour démarrer le thread. La classe thread a hérité de la classe Thread, elle ne peut donc pas hériter des autres classes parentes.

class ThreadTest extends Thread {  

    Thread thread;  

    public ThreadTest(Thread thread) {  
      this.thread = thread;  
  }  

   @Override  
   public void run() {  
      synchronized (thread) {  
          System.out.println("getObjectLock");  
         try {  
             Thread.sleep(9000);  
       } catch (InterruptedException ex) {  
          ex.printStackTrace();  
         }  
           System.out.println("ReleaseObjectLock");  
    }  
   }  
 }
Copier après la connexion
Copier après la connexion

● Implémentez l'interface Runnable pour créer une classe de thread, définissez la classe d'implémentation Runnable et remplacez la méthode run

  class RunnableImpl implements Runnable {  
    
     public void run() {  
          try {  
             System.out.println("Begin sleep");  
             Thread.sleep(2000);  
             System.out.println("End sleep");  
          } catch (InterruptedException e) {  
              e.printStackTrace();  
          }  
      }  
   }
Copier après la connexion

● Implémentez l'interface Callable, remplacez l'appel ( ), méthode call() En tant que corps d'exécution du thread, il a une valeur de retour

● Pool de threads, utilisant le pool de threads pour générer des objets de thread java.util.concurrent.ExecutorService, java.util.concurrent .Executors;

Comment l'implémenter dans la sécurité des threads Java

● Synchronisation mutuellement exclusive : il est recommandé d'utiliser le mot-clé synchronisé pour la synchronisation. Il existe la classe ReentrantLock dans le package simultané, qui. a des effets de mise en œuvre similaires. L'original synchronisé est toujours recommandé
. ● Synchronisation non bloquante : nécessite des instructions matérielles. Les instructions couramment utilisées sont : Test-and-Set Fetch-and-Increment Swap Compare-and-Swap (CAS) Load-Linked/Store-Conditional (LL/SC) Applications typiques. : AtomicInteger dans
● Pas de solution de synchronisation : enregistrez les variables dans le thread local afin qu'il n'y ait pas d'erreurs simultanées de plusieurs threads. La principale chose utilisée en Java est la classe ThreadLocal.

Méthode Join()

thread.Join ajoute le thread spécifié au thread actuel et peut fusionner deux threads s'exécutant alternativement en threads d'exécution séquentielle. Par exemple, si la méthode Join() du thread A est appelée dans le thread B, le thread B ne continuera pas à s'exécuter jusqu'à ce que le thread A termine son exécution.

t.join(); // Laissez le thread appelant terminer son exécution avant cela.
t.join(1000); //En attente du thread t, le temps d'attente est de 1000 millisecondes, quel que soit le délai d'attente

public class JoinTest implements Runnable{  

    public static int a = 0;  

    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  

    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join();//等待t线程完成后输出,可保证a=5;
        System.out.println(a);  
    }         
}
Copier après la connexion
Copier après la connexion

wait()

Il y a trois attentes méthodes d'Object Il existe des méthodes surchargées, dont l'une, wait(), attend indéfiniment (toujours) jusqu'à ce que d'autres threads appellent la méthode notify ou notifyAll pour réveiller le thread actuel, les deux autres méthodes sont wait(long timeout) et wait( ; long timeout, int nanos) Il est autorisé à passer le temps pendant lequel le thread actuel doit attendre avant d'être réveillé. Le délai d'attente est le nombre de millisecondes et nanos est le nombre de nanosecondes.

notify()

La méthode notify réveille uniquement un thread en attente (de l'objet) et provoque le démarrage de l'exécution du thread. Ainsi, si plusieurs threads attendent un objet, cette méthode ne réveillera qu'un seul des threads, et le thread à choisir dépend de l'implémentation de la gestion multi-thread par le système d'exploitation.

notifyAll()

notifyAll réveillera tous les threads en attente, bien que le thread qui le traitera en premier dépende de l'implémentation du système d'exploitation.
Ces méthodes peuvent être utilisées dans le problème "producteur-consommateur". Le consommateur est le thread qui attend l'objet dans la file d'attente, et le producteur est le thread qui libère l'objet dans la file d'attente et informe les autres threads.

Comment implémenter le multi-threading

● Héritez de la classe Thread pour créer une classe de thread et remplacez la méthode run La méthode run représente la tâche que le thread doit accomplir. () de l'objet thread pour démarrer le thread, la classe thread a hérité de la classe Thread, elle ne peut donc pas hériter d'autres classes parent.

class ThreadTest extends Thread {  

    Thread thread;  

    public ThreadTest(Thread thread) {  
      this.thread = thread;  
  }  

   @Override  
   public void run() {  
      synchronized (thread) {  
          System.out.println("getObjectLock");  
         try {  
             Thread.sleep(9000);  
       } catch (InterruptedException ex) {  
          ex.printStackTrace();  
         }  
           System.out.println("ReleaseObjectLock");  
    }  
   }  
 }
Copier après la connexion
Copier après la connexion

● Implémentez l'interface Runnable pour créer une classe de thread, définissez la classe d'implémentation Runnable et remplacez la méthode run

  class RunnableImpl implements Runnable {  
    
      public void run() {  
          try {  
              System.out.println("Begin sleep");  
              Thread.sleep(2000);  
              System.out.println("End sleep");  
          } catch (InterruptedException e) {  
              e.printStackTrace();  
           }  
       }  
   }
Copier après la connexion

● Implémentez l'interface Callable, remplacez l'appel ( ), méthode call() En tant que corps d'exécution du thread, il a une valeur de retour

● Pool de threads, utilisant le pool de threads pour générer des objets de thread java.util.concurrent.ExecutorService, java.util.concurrent .Executors;

Comment l'implémenter dans la sécurité des threads Java

● Synchronisation mutuellement exclusive : il est recommandé d'utiliser le mot-clé synchronisé pour la synchronisation. Il existe la classe ReentrantLock dans le package simultané, qui. a des effets de mise en œuvre similaires. L'original synchronisé est toujours recommandé
. ● Synchronisation non bloquante : nécessite des instructions matérielles. Les instructions couramment utilisées sont : Test-and-Set Fetch-and-Increment Swap Compare-and-Swap (CAS) Load-Linked/Store-Conditional (LL/SC) Applications typiques. : AtomicInteger dans
● Pas de solution de synchronisation : enregistrez les variables dans le thread local afin qu'il n'y ait pas d'erreurs simultanées de plusieurs threads. La principale chose utilisée en Java est la classe ThreadLocal.

Méthode Join()

thread.Join ajoute le thread spécifié au thread actuel et peut fusionner deux threads s'exécutant alternativement en threads d'exécution séquentielle. Par exemple, si la méthode Join() du thread A est appelée dans le thread B, le thread B ne continuera pas à s'exécuter jusqu'à ce que le thread A termine son exécution.

t.join(); // Laissez le thread appelant terminer son exécution avant cela.
t.join(1000); //En attente du thread t, le temps d'attente est de 1000 millisecondes, quel que soit le délai d'attente

public class JoinTest implements Runnable{  

    public static int a = 0;  

    public void run() {  
        for (int k = 0; k < 5; k++) {  
            a = a + 1;  
        }  
    }  

    public static void main(String[] args) throws Exception {  
        Runnable r = new JoinTest();  
        Thread t = new Thread(r);  
        t.start();        
        t.join();//等待t线程完成后输出,可保证a=5;
        System.out.println(a);  
    }         
}
Copier après la connexion
Copier après la connexion

wait()

Il y a trois attentes méthodes d'Object Il existe des méthodes surchargées, dont l'une, wait(), attend indéfiniment (toujours) jusqu'à ce que d'autres threads appellent la méthode notify ou notifyAll pour réveiller le thread actuel, les deux autres méthodes sont wait(long timeout) et wait( ; long timeout, int nanos) Il est autorisé à passer le temps pendant lequel le thread actuel doit attendre avant d'être réveillé. Le délai d'attente est le nombre de millisecondes et nanos est le nombre de nanosecondes.

notify()

La méthode notify réveille uniquement un thread en attente (de l'objet) et provoque le démarrage de l'exécution du thread. Ainsi, si plusieurs threads attendent un objet, cette méthode ne réveillera qu'un seul des threads, et le thread à choisir dépend de l'implémentation de la gestion multi-thread par le système d'exploitation.

notifyAll()

notifyAll réveillera tous les threads en attente, bien que le thread qui le traitera en premier dépende de l'implémentation du système d'exploitation.
Ces méthodes peuvent être utilisées dans le problème "producteur-consommateur". Le consommateur est le thread qui attend l'objet dans la file d'attente, et le producteur est le thread qui libère l'objet dans la file d'attente et informe les autres threads.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les cinq options de carrière Java qui vous conviennent le mieux ? Quelles sont les cinq options de carrière Java qui vous conviennent le mieux ? Jan 30, 2024 am 10:35 AM

Il existe cinq directions d'emploi dans l'industrie Java, laquelle vous convient le mieux ? Java, en tant que langage de programmation largement utilisé dans le domaine du développement de logiciels, a toujours été populaire. En raison de sa forte nature multiplateforme et de son cadre de développement riche, les développeurs Java disposent d'un large éventail d'opportunités d'emploi dans divers secteurs. Dans l'industrie Java, il existe cinq principales directions d'emploi, à savoir le développement JavaWeb, le développement d'applications mobiles, le développement de Big Data, le développement intégré et le développement du cloud computing. Chaque direction a ses caractéristiques et ses avantages. Les cinq directions seront discutées ci-dessous.

Essentiel pour le développement Java : Recommander l'outil de décompilation le plus efficace Essentiel pour le développement Java : Recommander l'outil de décompilation le plus efficace Jan 09, 2024 pm 07:34 PM

Essentiel pour les développeurs Java : Recommandez le meilleur outil de décompilation, des exemples de code spécifiques sont requis Introduction : Au cours du processus de développement Java, nous rencontrons souvent des situations où nous devons décompiler des classes Java existantes. La décompilation peut nous aider à comprendre et à apprendre le code d'autres personnes, ou à effectuer des réparations et des optimisations. Cet article recommandera plusieurs des meilleurs outils de décompilation Java et fournira des exemples de code spécifiques pour aider les lecteurs à mieux apprendre et utiliser ces outils. 1. JD-GUIJD-GUI est un open source très populaire

Explication détaillée des scénarios d'utilisation et des fonctions du mot clé volatile en Java Explication détaillée des scénarios d'utilisation et des fonctions du mot clé volatile en Java Jan 30, 2024 am 10:01 AM

Explication détaillée du rôle et des scénarios d'application du mot-clé volatile en Java 1. Le rôle du mot-clé volatile En Java, le mot-clé volatile est utilisé pour identifier une variable visible entre plusieurs threads, c'est-à-dire pour assurer la visibilité. Plus précisément, lorsqu'une variable est déclarée volatile, toute modification apportée à la variable est immédiatement connue des autres threads. 2. Scénarios d'application de l'indicateur d'état de mot clé volatile Le mot clé volatile convient à certains scénarios d'indicateur d'état, tels qu'un

Compétences en développement Java révélées : mise en œuvre de fonctions de cryptage et de décryptage des données Compétences en développement Java révélées : mise en œuvre de fonctions de cryptage et de décryptage des données Nov 20, 2023 pm 05:00 PM

Compétences en développement Java révélées : mise en œuvre de fonctions de cryptage et de décryptage des données À l'ère actuelle de l'information, la sécurité des données est devenue une question très importante. Afin de protéger la sécurité des données sensibles, de nombreuses applications utilisent des algorithmes de chiffrement pour chiffrer les données. En tant que langage de programmation très populaire, Java fournit également une riche bibliothèque de technologies et d’outils de chiffrement. Cet article révélera quelques techniques d'implémentation des fonctions de cryptage et de déchiffrement des données dans le développement Java afin d'aider les développeurs à mieux protéger la sécurité des données. 1. Sélection de l'algorithme de chiffrement des données Java prend en charge de nombreux

Compétences en développement Java révélées : implémentation de fonctions de compression et de recadrage d'images Compétences en développement Java révélées : implémentation de fonctions de compression et de recadrage d'images Nov 20, 2023 pm 03:27 PM

Java est un langage de programmation largement utilisé dans le domaine du développement de logiciels. Ses riches bibliothèques et ses fonctions puissantes peuvent être utilisées pour développer diverses applications. La compression et le recadrage d'images sont des exigences courantes dans le développement d'applications Web et mobiles. Dans cet article, nous révélerons quelques techniques de développement Java pour aider les développeurs à implémenter des fonctions de compression et de recadrage d'images. Tout d’abord, discutons de la mise en œuvre de la compression d’image. Dans les applications Web, les images doivent souvent être transmises sur le réseau. Si l’image est trop grande, le chargement prendra plus de temps et utilisera plus de bande passante. Par conséquent, nous

Explorez les principes de fonctionnement et les caractéristiques du multithreading Java Explorez les principes de fonctionnement et les caractéristiques du multithreading Java Feb 21, 2024 pm 03:39 PM

Explorez les principes de fonctionnement et les caractéristiques du multithreading Java Introduction : Dans les systèmes informatiques modernes, le multithreading est devenu une méthode courante de traitement simultané. En tant que langage de programmation puissant, Java fournit un mécanisme multithread riche, permettant aux programmeurs de mieux utiliser le processeur multicœur de l'ordinateur et d'améliorer l'efficacité de l'exécution des programmes. Cet article explorera les principes de fonctionnement et les caractéristiques du multithreading Java et l'illustrera avec des exemples de code spécifiques. 1. Le concept de base du multi-threading Le multithreading fait référence à l'exécution de plusieurs threads en même temps dans un programme, et chaque thread traite différents

Gestion des exceptions dans un environnement multithread Java Gestion des exceptions dans un environnement multithread Java May 01, 2024 pm 06:45 PM

Points clés de la gestion des exceptions dans un environnement multithread : Capture des exceptions : chaque thread utilise un bloc try-catch pour intercepter les exceptions. Gérer les exceptions : imprimez les informations sur les erreurs ou effectuez une logique de gestion des erreurs dans le bloc catch. Terminez le thread : lorsque la récupération est impossible, appelez Thread.stop() pour terminer le thread. UncaughtExceptionHandler : pour gérer les exceptions non interceptées, vous devez implémenter cette interface et l'attribuer au thread. Cas pratique : gestion des exceptions dans le pool de threads, en utilisant UncaughtExceptionHandler pour gérer les exceptions non interceptées.

Guide d'optimisation des performances multithreading Java Guide d'optimisation des performances multithreading Java Apr 11, 2024 am 11:36 AM

Le Guide d'optimisation des performances multithreading Java fournit cinq points d'optimisation clés : Réduire la surcharge de création et de destruction des threads Éviter les conflits de verrouillage inappropriés Utiliser des structures de données non bloquantes Tirer parti des relations Happens-Before Envisager des algorithmes parallèles sans verrouillage

See all articles