Maison Java javaDidacticiel Comment gérer les problèmes de communication inter-thread dans le développement Java

Comment gérer les problèmes de communication inter-thread dans le développement Java

Jun 29, 2023 pm 12:12 PM
信号量(semaphore) 线程通信问题 解决方法: 管程(monitor)

En tant que langage de programmation particulièrement adapté à la création d'applications multithread, Java peut exploiter pleinement les avantages des processeurs multicœurs pour améliorer la simultanéité et l'efficacité des programmes. Cependant, lors du développement multithread, la question de la communication entre les threads devient un défi majeur. Cet article présentera plusieurs méthodes courantes pour résoudre les problèmes de communication inter-thread.

  1. Variables partagées

Les variables partagées sont l'un des moyens les plus simples et les plus courants de communiquer entre les threads. Plusieurs threads peuvent transmettre des informations en accédant et en modifiant les variables partagées. Cependant, étant donné que les threads s'exécutent en parallèle, des conditions de concurrence critique peuvent survenir. Pour éviter les conditions de concurrence, nous devons utiliser un mutex pour protéger l'accès aux variables partagées. Les verrous mutex peuvent être implémentés en Java à l'aide du mot clé synchronisé ou de l'interface Lock.

Ce qui suit est un exemple de code qui utilise des variables partagées pour la communication des threads :

public class SharedVariableExample {
    private int sharedVar = 0;

    public synchronized void increment() {
        sharedVar++;
    }

    public synchronized int getSharedVar() {
        return sharedVar;
    }
}

public class MyThread extends Thread {
    private SharedVariableExample example;

    public MyThread(SharedVariableExample example) {
        this.example = example;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            example.increment();
        }
    }
}

public class Main {
    public static void main(String[] args) {
        SharedVariableExample example = new SharedVariableExample();

        MyThread thread1 = new MyThread(example);
        MyThread thread2 = new MyThread(example);

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

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("SharedVar: " + example.getSharedVar());
    }
}
Copier après la connexion

Dans l'exemple ci-dessus, deux threads effectuent respectivement 10 opérations d'incrémentation sur les variables partagées et s'impriment après avoir attendu que tous les threads terminent leur exécution via la jointure ( ) méthode La valeur de la variable partagée.

  1. Mécanisme d'attente/notification

Lors de l'utilisation de variables partagées pour la communication inter-thread, si un thread doit attendre le résultat d'un autre thread, nous pouvons utiliser le mécanisme d'attente/notification. Lorsqu'un thread doit attendre, il peut appeler la méthode wait() de l'objet pour mettre le thread dans un état d'attente. Lorsqu'une certaine condition est remplie, d'autres threads appellent la méthode notify() de l'objet pour réveiller le thread en attente.

Ce qui suit est un exemple de code qui utilise le mécanisme d'attente/notification pour la communication des threads :

public class WaitNotifyExample {
    private boolean flag = false;

    public synchronized void waitForSignal() {
        while (!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        flag = false;
        System.out.println("Received signal");
    }

    public synchronized void sendSignal() {
        flag = true;
        notify();
    }
}

public class WaitThread extends Thread {
    private WaitNotifyExample example;

    public WaitThread(WaitNotifyExample example) {
        this.example = example;
    }

    public void run() {
        example.waitForSignal();
    }
}

public class NotifyThread extends Thread {
    private WaitNotifyExample example;

    public NotifyThread(WaitNotifyExample example) {
        this.example = example;
    }

    public void run() {
        example.sendSignal();
    }
}

public class Main {
    public static void main(String[] args) {
        WaitNotifyExample example = new WaitNotifyExample();

        WaitThread waitThread = new WaitThread(example);
        NotifyThread notifyThread = new NotifyThread(example);

        waitThread.start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        notifyThread.start();

        try {
            waitThread.join();
            notifyThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Copier après la connexion

Dans l'exemple ci-dessus, le thread WaitThread attend que le signal soit reçu, le thread NotifyThread envoie le signal et réveille l'attente. thread après avoir attendu un certain temps via le thread de la méthode sleep().

  1. Blocking Queue

Blocking Queue est un moyen efficace d'établir la communication entre les threads. Il fournit les méthodes put() et take(), qui peuvent automatiquement bloquer et attendre lorsque la file d'attente est pleine ou vide jusqu'à ce que les conditions soient remplies.

Voici un exemple de code utilisant une file d'attente de blocage pour la communication par thread :

import java.util.concurrent.ArrayBlockingQueue;
Copier après la connexion

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)

Comment résoudre le problème du téléchargement lent des fichiers ISO dans Win11 Comment résoudre le problème du téléchargement lent des fichiers ISO dans Win11 Dec 24, 2023 pm 12:01 PM

Si nous souhaitons télécharger le fichier iso win11 depuis le site officiel de win11, la vitesse de téléchargement peut être trop lente en raison des services Microsoft. Pour le moment, il est recommandé de le télécharger directement depuis ce site pour résoudre ce problème. Solution : 1. Win11 télécharge les fichiers ISO trop lentement, principalement à cause des serveurs Microsoft. 2. Étant donné que Microsoft ne dispose pas de serveurs en Chine, la vitesse de notre réseau peut être lente et instable. 3. De plus, il s'agit d'un facteur objectif et il n'y a aucun moyen de le résoudre, nous ne pouvons donc qu'attendre qu'il se télécharge lentement. 4. Si vous souhaitez augmenter la vitesse, vous pouvez télécharger directement l'ISO du système Win11 à partir de ce site. 5. Ce site ne présente pas les mêmes problèmes que le site officiel de Microsoft. Il peut maximiser votre vitesse Internet et sera bientôt disponible.

Que dois-je faire si le Centre de sécurité Windows 11 ne peut pas être ouvert ? Solution : choisissez une autre application Que dois-je faire si le Centre de sécurité Windows 11 ne peut pas être ouvert ? Solution : choisissez une autre application Dec 30, 2023 pm 03:08 PM

Certains utilisateurs souhaitent ouvrir le Centre de sécurité Win11, mais ils rencontrent le problème que le Centre de sécurité Win11 ne peut pas ouvrir la sélection d'applications contextuelles. Ils ne savent pas quoi faire. Cela peut être dû à une erreur dans le chemin de démarrage de. notre application. Utilisez simplement le terminal Windows. Cela peut être résolu en entrant la commande dans . Le Centre de sécurité Win11 ne peut pas ouvrir l'application contextuelle. Sélectionnez 1. Cliquez avec le bouton droit sur le menu Démarrer du bas et ouvrez « Terminal Windows (Administrateur) » 2. Entrez « Set-ExecutionPolicyUnrestricted » et appuyez sur Entrée pour exécuter. L'icône apparaîtra. . Entrez « A » et appuyez sur Entrée. 3. Saisissez ensuite « Get-AppXPackage-AllUsers|Forea

Résoudre l'erreur Golang : type de récepteur invalide 'x' ('x' n'est pas un type défini), solution Résoudre l'erreur Golang : type de récepteur invalide 'x' ('x' n'est pas un type défini), solution Aug 26, 2023 am 10:31 AM

Résoudre l'erreur Golang : invalidreceivertype'x'('x'isnotadefinedtype), solution Dans le processus d'utilisation de la programmation Golang, nous rencontrons souvent diverses erreurs. L'une des erreurs courantes est "invalidreceivertype'x'('x'isnotadefinedtype)". Ce message d'erreur signifie que nous déclarons

Raisons et solutions pour ne pas pouvoir exécuter le jeu Billions of Zombies sur Win11 Raisons et solutions pour ne pas pouvoir exécuter le jeu Billions of Zombies sur Win11 Jan 02, 2024 pm 11:29 PM

Certains joueurs souhaitent jouer à Billions of Zombies sur le système win11 mais constatent qu'ils ne peuvent pas jouer ou entrer dans le jeu. Il s'agit d'un jeu relativement nouveau, donc des problèmes de compatibilité sont moins susceptibles de se produire. Cela peut être dû au fait qu'il nous manque certains composants, qui peuvent être réparés à l'aide des outils de réparation. Pourquoi ne puis-je pas jouer à Billions of Zombies dans win11 ? Méthode 1 : 1. De manière générale, si un composant est manquant, nous pouvons déterminer quel composant manque grâce à l'invite qui apparaît à l'ouverture du jeu. 2. Cependant, s'il y a trop de pièces manquantes, elles ne seront pas toutes affichées, vous pouvez donc directement essayer d'utiliser l'outil de réparation pour les réparer globalement. 3. Cliquez d'abord sur le lien à droite pour télécharger un outil de réparation DirectX. 4. Une fois le téléchargement et l'installation terminés, ouvrez le logiciel et sélectionnez « Détecter et réparer ». 5. Après cela, il suffit de

Que dois-je faire s'il n'y a pas de pilote USB dans la version pure du système win7 ? Que dois-je faire s'il n'y a pas de pilote USB dans la version pure du système win7 ? Jul 07, 2023 pm 09:37 PM

La version pure nouvellement installée du système win7 n'a pas de pilote USB, que devons-nous faire ? Nous pouvons accéder au gestionnaire de périphériques pour mettre à jour le pilote, ou utiliser un logiciel de gestion de pilotes pour installer le pilote. Voyons comment installer la version pure du pilote USB du système win7. 1. Nous utilisons d’abord le logiciel de gestion des pilotes pour analyser et installer le pilote. S’il ne fonctionne toujours pas après l’installation, nous devons accéder au panneau de configuration. 2. Dans le Panneau de configuration, cliquez sur Hardware Sound et sélectionnez Gestionnaire de périphériques. 3. Accédez à la page du gestionnaire de périphériques et recherchez l'option de contrôle USB. 4. Après avoir cliqué sur l'option USB, recherchez le pilote USB qui affiche un point d'exclamation et un point d'interrogation. 5. Cliquez ensuite avec le bouton droit sur Mettre à jour le pilote. 6. Si l'ordinateur est déjà connecté à Internet, nous pouvons nous connecter

Solution à l'écran noir lors de la saisie du mot de passe au démarrage de Windows 10 Solution à l'écran noir lors de la saisie du mot de passe au démarrage de Windows 10 Jul 10, 2023 pm 10:49 PM

Après la mise à niveau de votre système informatique vers Windows 10, vous découvrirez de nombreuses nouvelles fonctionnalités, mais vous pourrez également rencontrer des problèmes étranges. Par exemple, certains utilisateurs ont signalé que l'ordinateur portable pouvait être utilisé normalement, mais l'écran est soudainement devenu noir après avoir saisi le mot de passe lors de sa mise sous tension le lendemain. Ce qu'il faut faire? Ci-dessous, examinons la solution spécifique à ce problème. 1. Allumez l'ordinateur portable et entrez le mot de passe de mise sous tension. L'écran sera noir. 2. À ce moment, appuyez sur la combinaison de touches « Ctrl+Alt+Suppr » pour ouvrir le gestionnaire de tâches. ouvrez le gestionnaire de tâches, cliquez sur l'option "Fichier --- Exécuter une nouvelle tâche", entrez la commande "explorer.exe" et cliquez sur OK ; 4. Entrez sur le bureau à ce moment-là. Pour résoudre complètement le problème d'écran noir, cliquez sur "Démarrer".

Comment résoudre l'exception d'erreur de limite de taille de téléchargement de fichier Java (FileUploadSizeLimitExceededErrorExceotion) Comment résoudre l'exception d'erreur de limite de taille de téléchargement de fichier Java (FileUploadSizeLimitExceededErrorExceotion) Aug 19, 2023 pm 09:51 PM

Comment résoudre l'exception d'erreur de limite de taille de téléchargement de fichier Java (FileUploadSizeLimitExceededErrorExceotion) Dans le développement Web, le téléchargement de fichiers est une exigence fonctionnelle courante. Cependant, la fonction de téléchargement de fichiers en Java a une limite de taille de fichier par défaut. Lorsque la taille du fichier téléchargé dépasse la limite, l'exception FileUploadSizeLimitExceededErrorExceotion sera levée. Livre

Comment résoudre l'erreur 0x0000007b Comment résoudre l'erreur 0x0000007b Dec 25, 2023 pm 03:35 PM

De nombreux amis ont rencontré le code d'erreur 0x0000007b lors de l'utilisation d'ordinateurs, alors comment résoudre ce genre de situation ? Nous pouvons résoudre ce problème en modifiant le mode du disque dur ou en réinitialisant les paramètres. Jetons un coup d'œil aux solutions ci-dessous. Que faire si 0x0000007b apparaît : Méthode 1 : 1. Il est probable que le mauvais pilote de la carte graphique ait été mis à jour. Redémarrez l'ordinateur après l'apparition du code d'erreur. 2. Appuyez ensuite sur « F8 » pour accéder à l'interface de sélection du mode sans échec, sélectionnez « Dernière bonne configuration connue » pour accéder au système. 3. Cela peut résoudre le problème de conflit d'applications. S'il ne peut pas être résolu, vous pouvez essayer de modifier le mode de démarrage du disque dur. Méthode 2 : 1. Redémarrez d’abord l’ordinateur, puis utilisez le raccourci clavier pour entrer b.

See all articles