Menunggu Penyiapan Benang dengan ExecutorService
Apabila melaksanakan berbilang tugas secara serentak menggunakan ExecutorService, adalah penting untuk mengendalikan pemberitahuan penyiapan dengan berkesan. Artikel ini meneroka pendekatan terbaik untuk menunggu semua urutan selesai tanpa bergantung pada gelung tak terhingga.
Seperti yang diterangkan dalam masalah, gelung tak terhingga tidak dianggap sebagai penyelesaian yang optimum. Sebaliknya, ExecutorService menyediakan mekanisme terbina dalam untuk mengurus penyiapan tugas: kaedah shutdown() dan awaitTermination().
Menggunakan shutdown() dan awaitTermination()
Antara muka ExecutorService menawarkan kaedah shutdown(), yang memberi isyarat kepada ExecutorService untuk tidak lagi menerima yang baru tugasan. Setelah semua tugasan yang diserahkan pada masa ini telah selesai, ExecutorService akan ditamatkan.
Untuk menunggu tugasan selesai, kaedah awaitTermination() digunakan. Kaedah ini mengambil dua parameter:
Dalam contoh yang disediakan dalam soalan, kod boleh diubah suai seperti berikut:
ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } taskExecutor.shutdown(); try { taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { ... }
The Long.MAX_VALUE tamat masa memastikan kaedah awaitTermination() disekat sehingga semua tugasan selesai. Jika penyiapan tugas adalah sensitif masa, tamat masa terhingga boleh ditentukan.
Kesimpulan
Menggunakan kaedah shutdown() dan awaitTermination() menyediakan cara yang boleh dipercayai dan cekap untuk menunggu semua benang selesai tanpa menggunakan gelung tak terhingga. Pendekatan ini memudahkan pengurusan tugasan dan memastikan penyiapan rangkaian dengan cara terkawal.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Menunggu Penyusunan Benang Perkhidmatan Pelaksana Tanpa Gelung Infinite?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!