Maison Java javaDidacticiel Explication détaillée des bases du multithreading Java

Explication détaillée des bases du multithreading Java

Mar 28, 2017 pm 03:36 PM

1. Statut du fil

2. Création et utilisation de multi-threads

3. 🎜>

4. Collecte synchrone

Statut du fil

Les threads ont cinq états : nouveau, prêt, en cours d'exécution, bloqué ou terminé.

Nouveau : créez un nouveau fil de discussion et le fil entre dans le nouvel état ;

Prêt : après avoir appelé la méthode start() du fil de discussion pour démarrer le fil, il entre dans l'état prêt ; >

Exécuter : lorsque vous obtenez du temps CPU, le thread passe à l'état d'exécution à partir de l'état prêt. Si la tranche de temps expire ou si la méthode rendement() est appelée, le thread à l'état d'exécution peut entrer dans l'état prêt ;

Blocage : appelez la méthode join(), sleep() ou wait(), ou attendez la fin de l'E/S, le thread est dans un état bloqué

Complet : lorsque le thread se termine ; en exécutant la méthode run(), le thread se termine.

Création et utilisation de multi-threads

Diagramme de classes de Thread

1. Héritez de la classe Thread pour créer un nouveau fil

2. Implémentez l'interface Runnable

et réécrivez. méthode run()

PrintChar implémente l'interface Runnable et utilise Thread crée un thread. Puisque la classe Thread implémente l'interface Runnable, vous pouvez créer un objet de cette classe et appeler sa méthode start pour démarrer le thread

3. l'interface Executor Pour exécuter des tâches dans le pool de threads, l'interface ExecutorService est fournie pour gérer et contrôler les tâches.

Synchronisation des threads

Si une ressource partagée est accédée par plusieurs threads en même temps, elle peut être corrompue. Par exemple, si les champs de données sont modifiés dans des ordres différents, la valeur finale peut être incertaine. État de concurrence : si deux tâches ou plus accèdent à une ressource commune d'une manière qui provoque un conflit, cela s'appelle un état de concurrence. Pour éviter un état de concurrence, plusieurs threads doivent être évités. en même temps, entrez une partie spécifique du programme. Cette partie du programme est appelée section critique.

1. Utiliser la synchronisation des verrous

Java peut explicitement utiliser des verrous et des états pour synchroniser les threads. Un verrou est une instance de l'interface Lock, qui définit les méthodes de verrouillage et de libération des verrous.

RenntrantLock est une implémentation de Lock, utilisée pour créer des verrous mutuellement exclusifs. Des verrous peuvent être créés pour des politiques d’équité spécifiques. Une valeur de stratégie juste de 1 est vraie, garantissant que le thread avec le temps d'attente le plus long acquiert le verrou en premier. Si faux, il est donné à n'importe quel thread en attente.


2. Collaboration avec les threads

Les objets créés en appelant la méthode newCondition() de l'objet Lock peuvent être utilisés. Méthodes wait(), signal() et signalAll() pour établir une communication mutuelle entre les threads.

Lorsque le thread appelle la méthode wait(), le thread entre dans l'état d'attente, en attendant le signal de réveil.

3. La file d'attente de blocage

peut bloquer le thread actuel. Si un thread prend des éléments d'une file d'attente de blocage vide, le fil sera bloqué jusqu'à ce qu'il y ait des éléments dans la file d'attente bloquée. être automatiquement réveillé, ce qui offre une grande commodité.

Plusieurs files d'attente de blocage :

1 : ArrayBlockingQueue utilise un tableau pour implémenter une file d'attente de blocage, et une capacité ou une stratégie d'équité facultative doit être spécifiée pour construire

2 : LinkedBlockingQueue utilise une liste chaînée pour implémenter une file d'attente bloquante. Peut être créé de manière illimitée ou limitée.

3 : File d'attente prioritaire PriorityBlockQueue, trie les éléments en fonction de leur priorité.

Champ de données ArrayBlockingQueue




On peut voir que l'espace de stockage est un tableau et qu'un verrou est utilisé .

Mise en œuvre de deux méthodes importantes

Attendez lorsque la file d'attente est pleine et rejoignez la file d'attente lorsqu'elle n'est pas pleine. À ce moment, utilisez la synchronisation des verrous

file d'attente Attendez lorsqu'elle est vide et quittez la file d'attente lorsqu'elle n'est pas vide.

Applications bloquant les files d'attente

par As Comme le montre l'exemple, le producteur met les numéros dans la file d'attente, le consommateur prend les numéros de la file d'attente et attend lorsque la file d'attente est vide. La synchronisation a été implémentée dans la file d'attente sans utiliser de verrous ni de conditions.

3. Sémaphore

Le sémaphore fait référence à l'objet qui accède aux ressources communes. Avant d'accéder à une ressource, un thread doit obtenir l'autorisation du sémaphore. Après avoir accédé à la ressource, l'autorisation doit être restituée au sémaphore.

Le programme crée un sémaphore avec une autorisation. Lorsqu'un thread obtient une autorisation, les autres threads ne peuvent pas accéder à la ressource jusqu'à ce que le thread précédent libère l'autorisation.

Collections synchronisées

Les classes du framework Java Collections ne sont pas thread-safe, c'est-à-dire si elles sont accessibles par plusieurs threads en même temps ; en même temps et Mise à Jour, leur contenu peut être corrompu, vous pouvez protéger les données de la collection en verrouillant la collection ou en synchronisant la collection

Articles associés :

Implémentation Java de PUT, POST, demande de suppression

Introduction détaillée à la programmation Java Résumé des problèmes courants

Graphique de la communication à distance Java analyse de la technologie et des principes Introduction

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines 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)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

See all articles