Maison > Java > javaDidacticiel > Comment gérer plusieurs SwingWorkers et mettre à jour les étiquettes efficacement ?

Comment gérer plusieurs SwingWorkers et mettre à jour les étiquettes efficacement ?

Susan Sarandon
Libérer: 2024-12-11 16:14:11
original
276 Les gens l'ont consulté

How to Manage Multiple SwingWorkers and Update Labels Efficiently?

En attente de plusieurs SwingWorkers

Cette question demande comment créer plusieurs SwingWorkers, chacun responsable de la mise à jour d'une étiquette, et supprimer toutes les étiquettes lorsque tous les travailleurs ont terminé.

Une solution consiste à utiliser un CountDownLatch, qui permet à un thread d'attendre un nombre spécifié d'autres threads. pour terminer leurs tâches avant de reprendre l'exécution. Dans le code fourni, chaque travailleur invoque latch.countDown() à la fin, tandis qu'un travailleur superviseur bloque latch.await() jusqu'à ce que toutes les tâches soient terminées. Le superviseur met ensuite à jour les étiquettes ou les supprime complètement (bien que cette dernière option soit généralement peu attrayante).

Voici un exemple de code amélioré qui illustre cette approche :

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.*;

/**
* @see https://stackoverflow.com/a/11372932/230513
* @see https://stackoverflow.com/a/3588523/230513
*/
public class WorkerLatchTest extends JApplet {

    private static final int N = 8;
    private static final Random rand = new Random();
    private Queue<JLabel> labels = new LinkedList<JLabel>();
    private JPanel panel = new JPanel(new GridLayout(0, 1));
    private JButton startButton = new JButton(new StartAction("Do work"));

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal