Bonjour
J'ai vu que les méthodes stop, suspend et resume étaient dépréciées, mais il n'y a pas a priori de remplacement.
Comment puis-je suspendre, stopper ou reprendre, à partir d'une IHM, un thread fils si ce n'est en utilisant ces méthodes?
merci
Bonjour
J'ai vu que les méthodes stop, suspend et resume étaient dépréciées, mais il n'y a pas a priori de remplacement.
Comment puis-je suspendre, stopper ou reprendre, à partir d'une IHM, un thread fils si ce n'est en utilisant ces méthodes?
merci
tu peux ecrire un code qui realise le stop()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 private boolean stop = false; public void run() { boolean termine = false; while( !termine ) { try { // traitement de chaque thread synchronized(this) { Thead.yield(); // lecture du boolean termine = this.stop; } } catch( InterruptedException e ) { } } } public synchronized void stop() { this.stop = true; }
Cette méthode fonctionne uniquement si le code de la méthode run() autorise un test régulier d'un boolean. On n'obtiendra jamais un arrêt instantanné de l'exécution du thread.
Je n'avais pas vu la première fois, mais faire un Thread.yield() n'a pas beaucoup d'interet, surtout la ou il est place. Parce que si c'est pour donner une meilleur chance aux autres threads d'arreter celui-ci, c'est loupé, comme le monitor est déjà pris.
Sinon, si c'est pour donner la main aux autres threads de temps et en temps, c'est également inutile. Il vaut mieux laisser la vm faire le boulot.
J'ai regardé dans la faq.Bon pour le stop OK mais pour la pause. Je souhaiterais réellement le mettre en pause. Est-il envisageable d'utiliser un wait et de le réveiller de l'extérieur par un notify.
Est-ce propre?
Oui, c'est effectivement ce qu'il faut faire.Est-il envisageable d'utiliser un wait et de le réveiller de l'extérieur par un notify.
Est-ce propre?
Partager