等待多个 SwingWorker
这个问题问的是如何创建多个 SwingWorker,每个 SwingWorker 负责更新一个标签,并在所有工作人员都已完成。
一种解决方案是使用 CountDownLatch,它允许一个线程在恢复执行之前等待指定数量的其他线程完成其任务。在提供的代码中,每个工作线程在完成时调用latch.countDown(),而Supervisor工作线程在latch.await()上阻塞,直到所有任务完成。然后,主管更新标签或完全删除它们(尽管后一种选择通常没有吸引力)。
这是演示此方法的增强代码示例:
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();
以上是如何高效管理多个SwingWorker并更新标签?的详细内容。更多信息请关注PHP中文网其他相关文章!