US

Thread

On vient de revoir comment se passe l'exécution d'un programme séquentiel. Dans un tel programme, les instruction s'exécutent les unes à la suite des autres et il n'y en a qu'une seule à tout moment qui est en cours d'exécution. Lorsqu'on veut écrire un programme concurrent, plusieurs alternatives s'offrent à nous.

Application concurrente

Une application concurrente est capable d'effectuer plusieurs tâches en même temps, en parallèle. Si la machine dispose de plusieurs processeurs ou d'un processeur avec plusieurs cœur, les tâches pourront être exécutées réellement en parallèle. Sinon, le parallélisme sera simulé par le système d'exploitation.

La première manière d'écrire une application concurrente consiste à la diviser en plusieurs programmes qui seront tous exécutés en même temps. C'est comme quand vous démarrez plusieurs programmes sur votre ordinateur, ils fonctionnent tous en parallèle et sont capable de communiquer entre eux.

L'autre solution consiste à n'avoir qu'un seul programme, mais qui est constitué de plusieurs threads d'exécution. Il s'agit en fait de tâches dans un programme qui pourront être exécutées en parallèle. C'est précisément cette approche que nous allons voir dans le cadre de ce tutoriel. Java est tout spécialement prévu pour cela et intègre dans le langage les threads d'exécution. Le grand avantage de ces derniers est qu'ils sont beaucoup plus facile à créer et nécessitent moins de ressources étant donné qu'ils vont pouvoir partager les ressources du programme qui les a lancé.

Créer un thread d'exécution

Pour écrire des applications concurrentes en Java, on va utiliser la classe Thread qui se trouve dans le package java.lang. Celle-ci représente deux choses à la fois : la tâche qui doit être exécutée en parallèle et le thread d'exécution (on dira simplement thread à partir de maintenant). Pour définir une nouvelle tâche, il suffit d'écrire une nouvelle classe qui étend la classe Thread et de redéfinir la méthode run. Voici par exemple une tâche toute simple qui est un décompte, à utiliser par exemple lors du nouvel-an ou lors du lancement d'une fusée vers l'espace.