Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menentukan Status Penyiapan Berbilang Benang dengan Cekap?
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!