Rumah >Java >javaTutorial >Bagaimana untuk Cekap Menunggu Senarai Niaga Hadapan dan Mengendalikan Pengecualian?
Menunggu dengan Cekap pada Senarai Niaga Hadapan
Apabila berurusan dengan senarai niaga hadapan, matlamatnya adalah untuk menunggu sehingga selesai atau berlakunya pengecualian pada mana-mana masa hadapan. Pendekatan naif yang melibatkan panggilan individu ke f.get() boleh membawa kepada menunggu yang tidak perlu jika pengecualian berlaku lebih awal.
Mengelakkan Penantian Tidak Perlu dengan CompletionService
Untuk menangani perkara ini isu, kelas CompletionService mula dimainkan. Ia membolehkan tugas tak segerak dilaksanakan dan keputusannya dapat diperoleh semula dengan cara selamat benang apabila ia tersedia. Begini cara untuk menggunakannya:
<code class="java">Executor executor = Executors.newFixedThreadPool(4); CompletionService<SomeResult> completionService = new ExecutorCompletionService<>(executor); // Submit tasks to the service for (int i = 0; i < 4; i++) { completionService.submit(new Callable<SomeResult>() { @Override public SomeResult call() { // Task logic here return result; } }); } int received = 0; boolean errors = false; // Loop until all tasks are complete or an error occurs while (received < 4 && !errors) { Future<SomeResult> resultFuture = completionService.take(); // Blocks if nothing available try { SomeResult result = resultFuture.get(); received++; // Process result here } catch (Exception e) { // Log error errors = true; } } // Consider canceling remaining tasks if an error occurred</code>
Dengan menggunakan pendekatan CompletionService, anda boleh memantau penyiapan tugasan dalam masa nyata dan menghentikan pemprosesan selanjutnya jika ralat berlaku, sekali gus mengelakkan menunggu yang tidak perlu.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Menunggu Senarai Niaga Hadapan dan Mengendalikan Pengecualian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!