Thread
Fermé
helloworld95
-
1 déc. 2018 à 15:26
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 1 déc. 2018 à 18:20
KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 - 1 déc. 2018 à 18:20
A voir également:
- Thread
- Exception in thread "javafx application thread" java.lang.nullpointerexception ✓ - Forum Java
- System thread exception not handled nvlddmkm.sys - Forum Windows 10
- Qu'est ce qu'un thread ✓ - Forum Internet / Réseaux sociaux
- Thread processeur ✓ - Forum Processeur
- System thread exception not handled ntfs.sys - Forum Windows
1 réponse
KX
Messages postés
16668
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2023
3 005
1 déc. 2018 à 15:51
1 déc. 2018 à 15:51
Bonjour,
Tu peux créer un ThreadGroup puis mettre chaque Thread dans ce groupe, le premier Thread qui termine interrompt le ThreadGroup ce qui va interrompre tous les Threads non terminés.
Tu peux créer un ThreadGroup puis mettre chaque Thread dans ce groupe, le premier Thread qui termine interrompt le ThreadGroup ce qui va interrompre tous les Threads non terminés.
public class MyThread extends Thread {
public MyThread(ThreadGroup group, String name) {
super(group, name);
}
@Override
public void run() {
// ...
if (isInterrupted()) { // un autre Thread a terminé, il faut arrêter
return;
}
// ...
getThreadGroup().interrupt(); // indique aux autres Thread de terminer
}
}
1 déc. 2018 à 16:41
Modifié le 1 déc. 2018 à 18:23
Mais en restant sur le principe du ThreadGroup, tu peux le personnaliser pour lui ajouter une valeur qui correspond au premier Thread qui a terminé.
public class MyThreadGroup extends ThreadGroup { private final AtomicReference<MyThread> firstEnded; public MyThreadGroup(String name) { super(name); firstEnded = new AtomicReference<>(null); } public boolean setFirstEnded(MyThread thread) { return firstEnded.compareAndSet(null, thread); } public MyThread getFirstEnded() { return firstEnded.get(); } }public class MyThread extends Thread { public MyThread(MyThreadGroup group, String name) { super(group, name); } @Override public void run() { // ... if (((MyThreadGroup) getThreadGroup()).setFirstEnded(this)) { System.out.println("Je suis le premier à finir."); } else { System.out.println("Je ne suis pas le premier à finir."); } } }