Apabila memanfaatkan ExecutorService, pembangun mungkin menghadapi keperluan untuk menjeda pelaksanaan sehingga semua tugasan yang diberikan selesai. Siasatan ini meneroka pendekatan paling mudah untuk mencapai objektif ini.
Soalan:
Laksanakan pelbagai tugas pengiraan, satu setiap teras dan jeda pelaksanaan sehingga selesai. Pelaksanaan semasa menggunakan ExecutorService.execute() dan es.wait(), tetapi menghadapi IllegalMonitorStateException.
Jawapan:
Employ ExecutorService.invokeAll(), penyelesaian straightforward(), yang mencapai kefungsian yang diingini dengan satu baris kod:
List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size()); for (DataTable singleTable: uniquePhrases) { todo.add(Executors.callable(new ComputeDTask(singleTable))); } List<Future<Object>> answers = es.invokeAll(todo);
invokeAll() menjeda pelaksanaan sehingga semua tugasan selesai, menjadikan penutupan manual dan menunggu Penamatan() tidak diperlukan. Pendekatan ini sejajar dengan contoh ExecutorService yang boleh diguna semula merentas berbilang pelaksanaan.
Untuk penerokaan lanjut tentang topik berkaitan, rujuk rujukan ini:
Atas ialah kandungan terperinci Bagaimana untuk Cekap Menunggu Penyiapan Tugasan Menggunakan ExecutorService?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!