Cách đơn giản nhất để chờ đợi cho tất cả các nhiệm vụ ExecutorService
hoàn thành là gì? Nhiệm vụ của tôi chủ yếu là tính toán, vì vậy tôi chỉ muốn điều hành một số lượng lớn công việc - một công việc trên mỗi lõi. Ngay bây giờ thiết lập của tôi trông như thế này:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
thực hiện runnable. Điều này dường như để thực thi các nhiệm vụ chính xác, nhưng mã gặp sự cố wait()
với IllegalMonitorStateException
. Điều này thật kỳ lạ, bởi vì tôi đã chơi xung quanh với một số ví dụ về đồ chơi và nó dường như hoạt động.
uniquePhrases
chứa vài chục ngàn yếu tố. Tôi có nên sử dụng một phương pháp khác? Tôi đang tìm kiếm một cái gì đó đơn giản nhất có thể
Executors.newFixedThreadPool(System.getRuntime().availableProcessors());
es
) khi bạn muốn đợi nó - khóa sẽ tự động được giải phóng trong khi chờ đợi