Introduction au Multithreading en Java 

Vous souhaitez améliorer la performance et la réactivité de vos applications et tirer profit au maximum des processeurs de vos machines ? Ces objectifs pourraient être atteints grâce au multithreading, qui permet d’exécuter plusieurs tâches en parallèle

Cet article d’introduction est le premier d’une série d’articles qui visent à expliquer le framework de multithreading en Java, en partant des notions les plus basiques jusqu’à aborder des thématiques plus avancées. 

Prérequis 

Aucun. 

Qu’est-ce que le Multithreading ? 

Un thread peut être défini comme un processus léger ou une unité d’exécution d’un programme. 

Tous les programmes Java ont au moins un thread, connu sous le nom de « thread principal », qui est créé par la Java Virtual Machine (JVM) au début du programme, lorsque la méthode « main() » est appelée. 

Un programme multithread dispose de plusieurs threads qui lui permettent de fonctionner plus efficacement en exécutant plusieurs tâches simultanément. 

Différence entre un Thread et un Processus 

Les processus et les threads sont très similaires, ce qui peut créer de la confusion pour comprendre les différences entre les deux. Un processus et un thread sont une séquence d’exécution, mais ils diffèrent en ce que les processus s’exécutent dans des espaces mémoire différents et indépendants, tandis que les threads (du même programme) s’exécutent dans un espace mémoire partagé. 

Par conséquent, une mauvaise gestion de la mémoire partagée entre les threads peut entraîner des erreurs dans le programme, ceci est dû au fait que la mémoire (notamment les variables du programme) est partagée entre les différents threads. 

Multithreading, Parallélisme et Concurrence 

Le multithreading est essentiellement applicable lorsque nous parlons d’au moins deux threads. Lorsqu’une application est capable d’exécuter au moins deux tâches pratiquement en même temps en utilisant deux threads ou plus, on fait du multithreading. Bien que les tâches semblent s’exécuter simultanément, elles tirent probablement parti de la fonction de découpage du temps CPU (CPU time-slicing) du système d’exploitation, où le processeur exécute une partie d’une tâche avant de passer à une autre. 

Pour l’utilisateur final, toutes les tâches semblent s’exécuter en parallèle. 

Le parallélisme, quant à lui, exécute physiquement des parties de tâches ou plusieurs tâches en même temps, en utilisant l’infrastructure multiprocesseur ou multicœur du CPU. 

Les Modèles en Multithreading 

  • Concurrent non parallèle : L’application traite plus d’une tâche en même temps, mais aucune ne s’exécute réellement simultanément. 
  • Parallèle non concurrent : L’application traite plusieurs tâches dans un processeur multicœur en même temps. 
  • Non parallèle non concurrent : L’application traite toutes les tâches une par une, de manière séquentielle. 
  • Parallèle concurrent : L’application traite plusieurs tâches en même temps dans un processeur multicœur. 

Utilisations et Avantages 

  • Amélioration des performances sur les machines multiprocesseurs : La plupart des ordinateurs actuels offrent plusieurs processeurs ou un processeur multicœur. Chaque processeur peut exécuter un thread différent dans une application multithread, permettant aux tâches de s’exécuter réellement en parallèle. 
  • Diminution du temps inactif (IDLE) : Imaginez une application mono-thread où il y a deux opérations à effectuer. Si un autre thread était disponible, il pourrait exécuter une opération pendant que le premier thread attend, réduisant ainsi le temps inactif du processeur.  Il y a deux choses que l’utilisateur veut faire. 1) Téléchargez un fichier puis le traiter (disons que le téléchargement prend 10 secondes pour obtenir une connexion réseau, 5 secondes pour récupérer le fichier à travers le réseau et 30 secondes pour le traiter).   2) Copiez un autre fichier d’un dossier à un autre (disons que la copie du fichier prend 3 secondes). Lorsque le thread attend 10 secondes pour obtenir une connexion réseau, rien n’est fait jusqu’à ce qu’il obtienne réellement la connexion. Ainsi, le processeur n’est pas utilisé pendant les 10 secondes. Le temps qui correspond au repos du processeur est appelé IDLE time. Maintenant, s’il y avait un autre thread, alors ce thread aurait pu être utilisé pour la copie de fichier de 3 secondes lorsque le premier thread attend 10 secondes pour obtenir une connexion réseau. Le multithreading permet alors de diminuer le temps IDLE et améliorer ainsi la performance du programme. 
  • Réactivité de l’application : Augmente la réactivité car le programme peut continuer à fonctionner même si une partie effectue une longue opération ou est bloquée. 

Conclusion 

Cet article constitue une introduction théorique au multithreading. Dans le prochain article, nous manipulerons des threads avec du code Java, en apprenant à créer, lancer et faire communiquer entre eux. 

A bientôt pour la suite ! 

Nos autres articles

Partager cet article:

Nous Contacter

Une question, une candidature, une offre ?  Écrivez-nous…

01 84 20 94 37

contact@sijo.fr

43 Rue Pierre Brossolette, 92300