Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menentukan Status Penyiapan Berbilang Benang dengan Cekap?

Bagaimanakah Saya Boleh Menentukan Status Penyiapan Berbilang Benang dengan Cekap?

Barbara Streisand
Barbara Streisandasal
2024-11-28 03:31:10370semak imbas

How Can I Efficiently Determine the Completion Status of Multiple Threads?

Cara Memastikan Penyiapan Benang dalam Berbilang Benang

Apabila melaksanakan berbilang benang secara serentak, adalah penting untuk menentukan status penyelesaiannya. Artikel ini meneroka pelbagai kaedah untuk mencapai matlamat ini.

1. Thread.join(): Menyekat Tunggu

Kaedah Thread.join() membenarkan utas utama untuk menyekat sehingga utas tertentu menyelesaikan pelaksanaannya. Pendekatan ini, walaupun mudah, boleh menghalang tindak balas keseluruhan aplikasi anda.

2. Thread.isAlive(): Semakan Pengundian

Thread.isAlive() mengesahkan secara berkala jika urutan masih berjalan. Walau bagaimanapun, pendekatan ini secara amnya tidak digalakkan kerana potensi ketidakcekapan dan penggunaan sumbernya.

3. UncaughtExceptionHandler:

Pendekatan yang tidak ortodoks melibatkan penyediaan pengendali pengecualian yang tidak ditangkap. Apabila benang selesai, ia boleh diprogramkan untuk membuang pengecualian, mencetuskan pengendali dalam objek anda.

4. Kunci dan Penyegerak:

Memanfaatkan kunci atau penyegerak boleh menyediakan mekanisme yang lebih disegerakkan untuk mengurus pelaksanaan dan penyiapan benang.

5. Pemberitahuan Berasaskan Pendengar:

Penyelesaian yang lebih elegan melibatkan mencipta antara muka pendengar dan melaksanakan kelas yang memanjangkan NotifyingThread. Urutan ini memberitahu pendengar secara automatik setelah selesai, membenarkan urutan utama menerima pemberitahuan dan membalas dengan sewajarnya.

Pelaksanaan Pemberitahuan Berasaskan Pendengar:

Untuk melaksanakan pendekatan ini, mulakan dengan mentakrifkan antara muka pendengar:

public interface ThreadCompleteListener {
    void notifyOfThreadComplete(final Thread thread);
}

Seterusnya, buat kelas abstrak, NotifyingThread, yang memanjangkan Thread:

public abstract class NotifyingThread extends Thread {
    private final Set<ThreadCompleteListener> listeners
                   = new CopyOnWriteArraySet<>();
}

Kaedah doRun() harus dilaksanakan dan bukannya run() dalam urutan khusus anda. Apabila mereka selesai, mereka akan memberitahu mana-mana pendengar berdaftar.

Akhir sekali, ubah suai kelas utama yang memulakan urutan untuk melaksanakan ThreadCompleteListener. Selepas membuat setiap urutan, tambahkannya pada senarai pendengar:

NotifyingThread thread1 = new OneOfYourThreads();
thread1.addListener(this); // Add main class as a listener
thread1.start();           // Start the thread

Kaedah notifyOfThreadComplete anda akan digunakan apabila urutan selesai atau ranap, memberikan contoh urutan yang telah lengkap.

Nota : Melaksanakan Runnable daripada memanjangkan Thread biasanya lebih diutamakan untuk membuat thread baharu.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Status Penyiapan Berbilang Benang 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