Apa cara paling sederhana untuk menunggu semua tugas ExecutorService
selesai? Tugas saya terutama komputasi, jadi saya hanya ingin menjalankan sejumlah besar pekerjaan - satu di setiap inti. Sekarang pengaturan saya terlihat seperti ini:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
mengimplementasikan runnable. Ini tampaknya menjalankan tugas dengan benar, tetapi kode macet wait()
dengan IllegalMonitorStateException
. Ini aneh, karena saya bermain-main dengan beberapa contoh mainan dan tampaknya berhasil.
uniquePhrases
mengandung beberapa puluh ribu elemen. Haruskah saya menggunakan metode lain? Saya mencari sesuatu yang sesederhana mungkin
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
) ketika Anda ingin menunggu - kunci akan dilepaskan secara otomatis sambil menunggu