Comment créer un thread en Java ? | Multithreading en Java
Publié: 2020-12-29Dans cet article, nous examinerons le threading en Java et explorerons les mécanismes qui rendent le threading possible.
Table des matières
Threading en Java
La fonctionnalité de threading en Java est un sous-processus léger. Il est considéré comme la plus petite unité de traitement. C'est un moyen de réaliser le multitâche dans un programme. C'est une fonctionnalité utile lorsqu'il s'agit de jeux, d'animation, etc.
Java a un support intégré pour la création de threads et de multi-threads. Il s'agit d'une approche intelligente pour minimiser les inefficacités et les déplacements grâce à une utilisation optimale de l'espace CPU. En Java, cela peut être fait de deux manières :
- Étendre la classe de thread, ou
- Implémenter l'interface exécutable
Lorsque plusieurs threads sont exécutés simultanément, on parle de multithreading. Cela permet essentiellement à plusieurs parties d'un programme de s'exécuter simultanément, chaque partie d'un thread et chaque thread suivant un chemin d'exécution distinct.
Les threads utilisent l'espace mémoire partagé ; la mémoire n'est pas allouée à chaque partie, ce qui entraîne une utilisation maximale du processeur. De plus, changer de contexte ne prend pas beaucoup de temps. Cependant, trop de threads pourraient engager votre processeur dans le changement de contexte et votre exécution pourrait être retardée.
Un fil peut exister dans l'un des six états suivants
- NOUVEAU - dès qu'un fil est créé, il existe dans le nouvel état. Cela signifie essentiellement que le thread n'a pas encore commencé son exécution.
- RUNNING - lorsqu'un thread est en cours d'exécution ou est en ligne pour être exécuté, il est en cours d'exécution.
- WAITING - un thread en cours d'exécution est parfois arrêté ou suspendu afin de permettre à une autre activité de se produire. Une version sans délai d'expiration de wait() ou join() peut suspendre l'exécution d'un thread. Une fois que l'action s'est produite, un thread suspendu est repris.
- TIMED-WAITING - un thread en cours d'exécution est parfois temporairement arrêté ou suspendu pour une durée spécifique. Par exemple, lorsque la fonction sleep() est appelée.
- BLOQUÉ - lorsqu'un thread Java suspendu ne peut pas acquérir une ressource particulière, il est bloqué et existe dans l'état bloqué.
- TERMINATED - lorsqu'un thread a terminé son exécution, il existe dans l'état terminé. Cependant, vous pouvez mettre fin à un fil à tout moment.
En savoir plus sur l'architecture et les composants Java.

Avantages de créer un thread en Java
Il y a plusieurs avantages à créer des threads. Certains d'entre eux sont
- Comme les threads sont indépendants, une exécution n'affecte pas une autre même lorsqu'elles fonctionnent sur un espace mémoire partagé. Cela signifie également que vous pouvez effectuer plusieurs opérations simultanément.
- Le threading est une forme de multitâche et permet de gagner du temps.
- Une erreur dans un thread n'affecte pas un autre.
Comment créer un thread en Java ?
Comme indiqué ci-dessus, il existe deux façons de procéder : étendre la classe de thread ou implémenter une interface exécutable
Classe de thread
Il existe des constructeurs et des méthodes dans la classe Thread qui vous permettent d'effectuer des opérations, de gérer et de suivre les threads. Il étend la classe Object qui implémente ensuite l'interface compagnon Runnable. Les constructeurs présents dans la classe thread sont :Thread(), Thread(String name), Thread(Runnable r) et Thread(Runnable r, String name).

Voici les méthodes et leurs descriptions
| Méthode | A quoi sert-il ? |
| démarrer() | Lance l'exécution |
| Cours() | Pour exécuter une action pour un thread |
| sommeil() | Met un thread en veille pour une durée donnée |
| rejoindre() | Attendre qu'un autre thread soit terminé |
| getPriorité() | Pour indiquer la priorité d'un thread donné |
| définir la priorité() | Pour modifier la priorité d'un thread donné |
| obtenirNom() | Pour renvoyer le nom d'un thread spécifié |
| setName() | Pour changer le nom du thread spécifié |
| getId() | Pour renvoyer l'ID d'un thread donné |
| est vivant() | Pour tester si un fil existe toujours dans n'importe quel état |
| rendement() | Suspend l'exécution d'un objet thread pour permettre à un autre thread de s'exécuter |
| suspendre() | Pour suspendre un fil donné |
| continuer() | Pour reprendre un thread à partir de l'état suspendu |
| arrêter() | Pour arrêter un thread donné |
| détruire() | Pour détruire le groupe de threads et les sous-groupes |
| interrompre() | Pour provoquer une interruption dans l'exécution du thread |
| est interrompu() | Pour tester si l'exécution d'un thread donné est interrompue |
| interrompu() | Pour tester si l'exécution du thread en cours est interrompue |
| activeCount() | Pour renvoyer le nombre de threads actifs dans un groupe de threads |
| holdLock() | Elle renvoie true si et seulement si le thread en cours détient le verrou du moniteur sur l'objet spécifié. |
| getState() | Pour déterminer l'état d'un thread donné |
| setContextClassLoader() | Pour définir le contexte ClassLoader |
| getContextClassLoader() | Pour retourner le contexte ClassLoader |
Afin de créer un thread en étendant la classe Thread, vous devez d'abord créer une classe qui étend la classe java.lang.Thread. Cette classe est définie pour remplacer la méthode run(). Ensuite, un objet est créé dans la nouvelle classe qui suit en appelant la méthode start() pour commencer l'exécution du thread.
Doit lire: Programmes de modèles en Java que vous devriez vérifier
Interface exécutable
C'est le moyen le plus simple de créer un fil. Une seule méthode est requise pour implémenter l'interface exécutable : run()
Pour le déclarer, on écrit
public void run()

Dans run(), nous procédons à l'écriture du code pour créer un nouveau thread.
Inscrivez-vous à des cours de génie logiciel dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.
Classe de thread vs interface exécutable
La classe Thread vous empêche d'étendre toute autre classe. En effet, l'héritage multiple n'est pas possible en Java. Cependant, ce n'est pas le cas lorsque nous implémentons l'interface Runnable où vous continuez à étendre d'autres classes.
L'extension de la classe Thread vous permet d'accéder à plusieurs méthodes importantes qui améliorent la fonctionnalité d'un thread. Par exemple, yield(), stop(), isalive(), interrupt(). L'interface Runnable n'a qu'une méthode plutôt limitante.
Emballer
Si vous souhaitez en savoir plus sur Java, le développement de logiciels à pile complète, consultez le programme Executive PG de upGrad & IIIT-B en développement de logiciels à pile complète, conçu pour les professionnels en activité et offrant plus de 500 heures de formation rigoureuse, 9+ projets et affectations, statut d'ancien de l'IIIT-B, projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.

