Médiaforma

Java – Multithreading

Print Friendly

Un thread est un bloc de code qui s’exécute en parallèle d’un ou de plusieurs autres blocs de code, à l’intérieur d’un même espace mémoire. Attention, les threads ne sont pas des processus qui, eux, s’exécutent dans des espaces mémoires isolés.

 

Cycle de vie d’un thread

Un thread se trouve dans l’un des quatre états suivants :

  • Inexistant. Il n’a pas encore été instancié.
  • Existant mais pas actif. Pour créer un thread, vous devez dans un premier temps l’instancier. Un objet est alors créé en mémoire, mais le thread n’est pas encore actif.
  • Actif. Lorsque la méthode start() a été exécutée, le thread est actif. Le code contenu dans la méthode run() est alors exécuté. Quand le système en aura la possibilité, il donnera du temps d’exécution au thread.
  • En attente. Un thread peut être mis en attente. Dans ce cas, il ne consomme aucune ressource CPU. Pour mettre un thread en attente, vous utiliserez la méthode Thread.sleep(), en précisant la durée de la mise en attente en millisecondes.
  • Mort. Un thread est mort lorsqu’il est sorti de la méthode run().

 

Pour qu’une classe puisse être considérée comme un thread, elle doit être dérivée de la classe Thread, qui implémente l’interface Runnable. Cette classe étant définie, il vous suffira de placer le code correspondant au traitement à effectuer dans la méthode run().

Nous allons passer à la pratique en créant un thread qui affichera du texte toutes les 500 millisecondes. Tant que ce thread sera actif, un autre texte sera affiché par la classe main() toutes les secondes. La durée de vie du thread sera arbitrairement fixée à 10 secondes.

Définissez la classe multithreading comme ceci :

public class multithreading {
    public static void main(String[] args) {
      Unthread thread = new Unthread();
      thread.start();
      while( thread.isAlive() ) {
        System.out.println("Cette ligne est affichée par la méthode main()");
        try {
          thread.sleep(1000);
        }
        catch (InterruptedException iex) {
            System.out.println(iex);
        }
      }
    }
}

Définissez la classe unThread comme ceci :

public class unThread extends Thread{
  public void run() {
    long debut = System.currentTimeMillis();
    while( System.currentTimeMillis() < ( debut + 10000)) {
      System.out.println("Cette ligne est affichée par le thread");
      try {
        Thread.sleep(500);
      }
      catch (InterruptedException iex) {
          System.out.println(iex);
      }
    }
  }
}

Ouvrez une fenêtre Invite de commandes et compilez ces deux classes avec les commandes suivantes :

javac multithreading.java
javac unThread.java

Lancez l’application multithread avec la commande suivante :

java multithreading

Voici ce que vous devriez obtenir :

Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Cette ligne est affichée par le thread
Cette ligne est affichée par la méthode main()
Cette ligne est affichée par le thread
Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply