Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Memastikan Semua Tugas Selesai Sebelum Meneruskan Perkhidmatan Pelaksana?

Bagaimanakah Saya Boleh Memastikan Semua Tugas Selesai Sebelum Meneruskan Perkhidmatan Pelaksana?

Linda Hamilton
Lepaskan: 2024-11-28 08:14:13
asal
878 orang telah melayarinya

How Can I Ensure All Tasks Complete Before Proceeding with an ExecutorService?

ExecutorService - Penyelesaian Menunggu Penyiapan Tugasan

Apabila bekerja dengan sejumlah besar tugas pengiraan yang perlu dilaksanakan serentak, ia adalah penting untuk mempunyai mekanisme untuk menunggu semua tugas selesai. Ini memastikan bahawa tindakan seterusnya boleh dilakukan hanya selepas semua tugasan selesai.

Dalam contoh anda, di mana anda cuba menggunakan ExecutorService.wait() untuk mencapainya, anda menghadapi IllegalMonitorStateException. Ralat ini berlaku kerana wait() dimaksudkan untuk digunakan semasa menunggu pada kunci intrinsik objek, yang tidak berkenaan dalam senario ini.

Penyelesaian paling mudah ialah memanfaatkan ExecutorService.invokeAll(). Kaedah ini mengambil koleksi tugas Boleh Panggil, melaksanakannya secara selari dan mengembalikan senarai objek Masa Depan. Setiap Masa Depan mewakili hasil tugas tertentu. Secara lalai, invokeAll() akan menyekat sehingga semua tugasan selesai sebelum mengembalikan senarai objek Masa Depan.

Begini cara anda boleh mengubah suai kod anda:

ExecutorService es = Executors.newFixedThreadPool(2);
List<Callable<Object>> tasks = new ArrayList<>();

for (DataTable singleTable : uniquePhrases) {
    tasks.add(Executors.callable(new ComputeDTask(singleTable)));
}

List<Future<Object>> results = es.invokeAll(tasks);
Salin selepas log masuk

Dalam kod yang dikemas kini ini, ExecutorService .invokeAll() akan menunggu sehingga semua tugasan selesai, membolehkan anda meneruskan tindakan anda yang seterusnya dengan yakin.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memastikan Semua Tugas Selesai Sebelum Meneruskan Perkhidmatan Pelaksana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan