Fils Java

Fils Java
Les threads permettent à un programme de fonctionner plus efficacement en faisant plusieurs choses en même temps.
Les threads peuvent être utilisés pour effectuer des tâches complexes en arrière-plan sans interrompre le programme principal.
Création d’un fil
Il existe deux façons de créer un fil.
Il peut être créé en étendant le Thread
classe et en remplaçant sa run()
méthode:
Étendre la syntaxe
public class Main extends Thread { public void run() { System.out.println("This code is running in a thread");
}}
Une autre façon de créer un thread est d’implémenter le Runnable
interface:
Implémenter la syntaxe
public class Main implements Runnable {
public void run() {
System.out.println("This code is running in a thread");
}
}
Exécution de threads
Si la classe étend la Thread
classe, le thread peut être exécuté en créant une instance de la classe et en appelant son start()
méthode:
Étendre l’exemple
public class Main extends Thread {
public static void main(String[] args) {
Main thread = new Main();
thread.start();
System.out.println("This code is outside of the thread");
}
public void run() {
System.out.println("This code is running in a thread");
}
}
Essayez-le vous-même »
Si la classe implémente le Runnable
interface, le thread peut être exécuté en passant une instance de la classe à un Thread
constructeur de l’objet, puis en appelant le thread
start()
méthode:
Exemple d’implémentation
public class Main implements Runnable {
public static void main(String[] args) {
Main obj = new Main();
Thread thread = new Thread(obj);
thread.start();
System.out.println("This code is outside of the thread");
}
public void run() {
System.out.println("This code is running in a thread");
}
}
Essayez-le vous-même »
Différences entre “étendre” et “implémenter” les threads
La principale différence est que lorsqu’une classe étend la classe Thread, vous ne pouvez étendre aucune autre classe, mais en implémentant l’interface Runnable, il est également possible d’étendre une autre classe, comme : classe MyClass extends OtherClass implements Runnable
.
Problèmes de simultanéité
Étant donné que les threads s’exécutent en même temps que d’autres parties du programme, il n’y a aucun moyen de savoir dans quel ordre le code s’exécutera. Lorsque les threads et le programme principal lisent et écrivent les mêmes variables, les valeurs sont imprévisibles. Les problèmes qui en résultent sont appelés problèmes de concurrence.
Exemple
Un exemple de code où la valeur de la variable montant est imprévisible :
public class Main extends Thread { public static int amount = 0; public static void main(String[] args) { Main thread = new Main(); thread.start(); System.out.println(amount); amount++; System.out.println(amount);
}public void run() { amount++;
}}
Essayez-le vous-même »
Pour éviter les problèmes de concurrence, il est préférable de partager le moins d’attributs possible entre les threads. Si les attributs doivent être partagés, une solution possible consiste à utiliser le isAlive()
méthode du thread pour vérifier si le thread a fini de s’exécuter avant d’utiliser des attributs que le thread peut modifier.
Exemple
Utiliser isAlive()
pour éviter les problèmes de concurrence :
public class Main extends Thread { public static int amount = 0; public static void main(String[] args) { Main thread = new Main(); thread.start(); // Wait for the thread to finish while(thread.isAlive()) { System.out.println("Waiting...");
}// Update amount and print its value System.out.println("Main: " + amount); amount++; System.out.println("Main: " + amount);
}public void run() { amount++;
}}
Essayez-le vous-même »
#Fils #Java