// Notre classe hérite de Thread
class MonThread extends Thread {
// Attributs
int no_fin;
int attente;
// Constructeur
MonThread(int fin, int att) {
no_fin = fin;
attente = att;
}
// Les actions qui seront effectuées par le Thread
public void run() {
for (int i = 1; i <= no_fin; i++) {
System.out.println(this.getName() + ":" + i);
// On entoure le sleep d'un Try Catch au cas où on coupe le Thread
try {
sleep(attente);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// Lancement du programme
public static void main(String args[]) {
// On instancie les threads
MonThread cp1 = new MonThread(100, 100);
MonThread cp2 = new MonThread(50, 200);
// On démarre les Threads
cp1.start();
cp2.start();
// On bloque l'éxécution du code jusqu'à ce que les Threads aient finis
try {
cp1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
cp2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// On appelle l'interface Runnable
class MonThreadRunnable implements Runnable {
String txt;
// Constructeur
public MonThreadRunnable(String t) {
txt = t;
}
// Actions exécutées par le Thread
public void run() {
for (int j = 0; j < 3; j++) {
\!h // Pour utiliser des méthodes de Thread, il faut faire appel à Thread
\!h Thread.sleep(attente);
System.out.println(txt);
}
}
// Exécution du programme
static public void main(String args[]) {
\!h // Instantiation des Threads
\!h MonThreadRunnable a = new MonThreadRunnable("bonjour ");
\!h // L'implémentation de Runnable nécéssite d'utiliser la classe Thread native de Java, qui prend alors en paramètre notre ThreadRunnable
\!h Thread aThread = new Thread(a);
MonThreadRunnable b = new MonThreadRunnable("au revoir ");
Thread bThread = new Thread(b);
aThread.start();
bThread.start();
try {
aThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
bThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}