Rumah >Java >javaTutorial >Bagaimana Mengurus Berbilang SwingWorkers dan Kemas Kini Label dengan Cekap?

Bagaimana Mengurus Berbilang SwingWorkers dan Kemas Kini Label dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-12-11 16:14:11279semak imbas

How to Manage Multiple SwingWorkers and Update Labels Efficiently?

Menunggu Berbilang SwingWorkers

Soalan ini menanyakan cara mencipta berbilang SwingWorkers, masing-masing bertanggungjawab mengemas kini label dan mengalih keluar semua label apabila semua pekerja telah selesai.

Satu penyelesaian ialah menggunakan CountDownLatch, yang membolehkan utas untuk menunggu bilangan utas lain yang ditentukan untuk menyelesaikan tugas mereka sebelum meneruskan pelaksanaan. Dalam kod yang disediakan, setiap pekerja memanggil latch.countDown() apabila selesai, manakala pekerja Penyelia menyekat pada latch.await() sehingga semua tugasan selesai. Penyelia kemudian mengemas kini label atau mengalih keluarnya sama sekali (walaupun pilihan terakhir biasanya tidak menarik).

Berikut ialah contoh kod dipertingkat yang menunjukkan pendekatan ini:

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();

Atas ialah kandungan terperinci Bagaimana Mengurus Berbilang SwingWorkers dan Kemas Kini Label dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn