Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menentukan Status Penyiapan Benang Kanak-Kanak dengan Berkesan dalam Pengaturcaraan Berbilang Benang?
Menentukan Status Penyiapan Benang
Dalam pengaturcaraan berbilang benang, adalah penting untuk mengetahui apabila urutan anak telah selesai dilaksanakan. Soalan ini meneroka pelbagai pendekatan untuk memantau status penyiapan utas.
Thread.join():
Kaedah ini dalam utas utama menyekat pelaksanaan sehingga semua utas anak selesai. Ia memastikan penyiapan yang disegerakkan tetapi merupakan pendekatan menyekat.
Thread.isAlive():
Polling Thread.isAlive() membolehkan anda menyemak sama ada thread masih dilaksanakan. Walau bagaimanapun, adalah disyorkan untuk mengelakkan pengundian kerana ia tidak cekap dan boleh menjejaskan prestasi.
Pengendalian Pengecualian:
Dalam pendekatan yang tidak konvensional, anda boleh mengkonfigurasi pengendalian pengecualian yang tidak ditangkap untuk setiap urutan. Apabila benang selesai, ia melemparkan pengecualian yang boleh dikendalikan dalam objek utama anda.
Utiliti Serentak:
Utiliti serentak Java seperti kunci dan penyegerak boleh digunakan untuk menyelaraskan pelaksanaan utas dan wujudkan kebergantungan.
Penyelesaian Benang Pendengar:
Pendekatan yang lebih ortodoks ialah mencipta antara muka pendengar:
public interface ThreadCompleteListener { void notifyOfThreadComplete(final Thread thread); }
Kemudian, tentukan kelas utas asas abstrak yang memanjangkan Benang dan melaksanakan kaedah berikut:
public abstract class NotifyingThread extends Thread { private final Set<ThreadCompleteListener> listeners = new CopyOnWriteArraySet<>(); public final void addListener(final ThreadCompleteListener listener) { listeners.add(listener); } public final void removeListener(final ThreadCompleteListener listener) { listeners.remove(listener); } private final void notifyListeners() { for (ThreadCompleteListener listener : listeners) { listener.notifyOfThreadComplete(this); } } @Override public final void run() { try { doRun(); } finally { notifyListeners(); } } public abstract void doRun(); }
Setiap urutan kanak-kanak harus melanjutkan NotifyingThread dan melaksanakan doRun() dan bukannya run(). Setelah selesai, urutan secara automatik memanggil notifyListeners().
Dalam kelas utama anda, laksanakan ThreadCompleteListener dan tambahkan diri anda sebagai pendengar apabila mencipta setiap urutan:
NotifyingThread thread1 = new OneOfYourThreads(); thread1.addListener(this); // add ourselves as a listener thread1.start(); // Start the Thread
Apabila setiap urutan selesai, kaedah notifyOfThreadComplete digunakan, memberikan akses kepada contoh urutan yang lengkap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Status Penyiapan Benang Kanak-Kanak dengan Berkesan dalam Pengaturcaraan Berbilang Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!