Comment créer un thread en Java ? | Multithreading en Java

Publié: 2020-12-29

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

  1. Étendre la classe de thread, ou
  2. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. BLOQUÉ - lorsqu'un thread Java suspendu ne peut pas acquérir une ressource particulière, il est bloqué et existe dans l'état bloqué.
  6. 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

  1. 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.
  2. Le threading est une forme de multitâche et permet de gagner du temps.
  3. 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.

Décrochez le job de vos rêves

Postulez maintenant pour une maîtrise en génie logiciel