Art*_*rez 2 java multithreading runnable java-8
我想同时运行一些任务,所以我有一个代码如下:
for(final Task task : tasks){
(new Thread(){public void run(){
task.run(args);
}}).start();
Run Code Online (Sandbox Code Playgroud)
我怎么知道所有任务何时完成(任务量可以变化),以便我可以在完成所有任务后运行某些东西?
System.out.println("All tasks are finished");
Run Code Online (Sandbox Code Playgroud)
而不是显式创建Threads,将Runnables提交给ExecutorService,然后调用其shutdown和awaitTermination方法:
ExecutorService executor = Executors.newFixedThreadPool(tasks.size());
for (final Task task : tasks) {
executor.submit(new Runnable() {
@Override
public void run() {
task.run(args);
}
});
}
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLSECONDS);
Run Code Online (Sandbox Code Playgroud)
较短的版本是使用parallelStream
tasks.parallelStream().forEach(t -> t.run(args));
Run Code Online (Sandbox Code Playgroud)
这将使用您拥有的所有CPU(如果您有足够的任务)运行所有任务,并等待全部完成.