Les unités d'exécution (ou threads) sont des séquences d'instructions d'un programme, exécutées indépendamment les unes des autres. Une application multithread est capable de lancer plusieurs threads simultanément dans un seul processus.

Par défaut, chaque programme Java s'exécute automatiquement dans un thread unique. Si une application Java a besoin d'exécuter plusieurs tâches en paralèlle, l'utilisation des threads semble indispensable. Par exemple, dans un programme séquentiel, un compteur comptabiliserait le nombre d'affichage d'une page Web et sauvegarderait à intervalle de mille les statistiques de ce compteur dans un fichier. Il apparaît évident que lorsque la sauvegarde sera exécutée, le compteur ne pourrait plus s'incrémenter normalement si des visiteurs accèdent à la page Web à ce moment précis.

La machine virtuelle Java (JVM) exécute toujours plusieurs threads en même temps. Effectivement, outre le programme lui-même, d'autres unités d'exécution propres au système sont activées en paralèlles, à l'image des opérations relatives à la gestion événementielle et au collecteur de déchets (Garbage Collector). Ils sont appelés les threads démons (daemons threads).

Le principe du multithreading consiste à exécuter réellement dans un système multi-processeurs, des tâches dans le même temps d'horloge. Tandis qu'un système mono-processeur ou seul un thread peut s'exécuter à un moment donné, fournira l'illusion d'un fonctionnement multithread grâce à une permutation rapide entre les tâches.

La création d'applications avec une interface graphique (GUI : Graphic User Interface) à l'aide des paquetages AWT et Swing, ainsi que la programmation réseau nécessite couramment l'utilisation de la technique du multithreading.

Bien que le multithreading possède des avantages incontestables, les programmes l'utilisant deviennent plus difficile à comprendre et bien plus complexe à déboguer. La réutilisabilité du code source ne peut être également assurée dans d'autres cas d'utilisation.

Tous les programmes Java s'exécute au sein d'un thread principal. Ce thread est accessible via la méthode statique Thread.currentThread().

public class Application {
    public static void main(String[] args){
        System.out.println("Le programme débute...");
        Thread thread = Thread.currentThread();
        thread.setName("Thread Principal");
        System.out.println("Thread : " + thread.toString());
    }
}
Sommaire