Les "chunks" sont des données que tu transmets à l'EDT via la méthode #publish() de ton SwingWorker et que tu traites via la méthode #process()
- La méthode #publish() est donc appelée par le "business thread" de ton worker
- La méthode #process() est appelée de l'EDT
Cette mécanique permet de transmettre des états concernant le traitement en cours de réalisation et adapter ton interface graphique.
Sinon concernant le code
1 2 3 4 5 6 7 8
| while (!first.isDone() || !second.isDone()) {
try {
first.get();
second.get();
} catch (Exception e) {
}
} |
Ce n'est pas appelé de l'EDT mais du thread principal (celui qui exécute le main)
Cette attente n'a pas beaucoup d’intérêt par rapport à ta question, il s'agissait surtout d'attendre avant de rendre la main.
Car les workers (si je ne me trompe pas) créer des Thread de type "daemon". C'est à dire que si les seuls threads vivants qui subsistent sont des threads daemons, alors l'application s’arrête.
Donc si j'avais laissé le thread principal se finir, l'application se serait arrêté avant de terminer les 2 traitements. Avec un environnement graphique initialisé, je n'aurais pas eu ce soucis.
Dans ton cas, tu ne devrais pas avoir besoin de réaliser ce bout de code, surtout si dans ton cas tu lances tes workers de l'EDT, ca aurait effectivement comme conséquence de bloquer tout...
Dans mon exemple, il y a 4 threads en jeu
- le thread principal executant le main() et donc la méthode Exemple#execute()
- le business thread du premier worker exécutant traitement1()
- le business thread du second worker exécutant traitement2()
- le thread de l'EDT exécutant le done()
Partager