等待多個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中文網其他相關文章!