我是 ExecutorService 的新手,但不确定我的处理方法。对于一个已知任务,我最多可以处理 100 个线程。我使用下面的一般格式,在其中创建 FutureTasks 列表,然后将它们提交给 ExecutorService。ExecutorService 返回并将这些挂起的结果添加到另一个列表中。然后我遍历这个列表,在每个待处理的结果上调用 get()。
我的问题是:在所有 100 个线程都完成之前,每个 get() 上的这个块不会依次阻塞吗?有一个更好的方法吗 ?
我是否正确假设 get() 返回 Callable 实现的 call() 方法的结果?我正在使用默认的 FutureTask 类,并且没有对其进行子类化。
ExecutorService exec = Executors.newFixedThreadPool( NUM_THREADS );
List<JobClass> originalList = new ArrayList<JobClass>();
List<SomeOtherClass> pendingResult = new ArrayList<SomeOtherClass>();
List<Future<SomeOtherClass>> resultList = new ArrayList<Future<SomeOtherClass>>();
for( JobClass sc : originalList )
pendingResult.add( submit( sc );
for( Future<SomeOtherClass> future : futures )
resultList.add( future.get(5, TimeUnit.SECONDS) );