Maison >Java >javaDidacticiel >Explication détaillée des bases du multithreading Java
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 Runnableet 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 threadsSi 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 construire2 : 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 ArrayBlockingQueueOn 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!