我......真的不知道如何更好地表达标题。但基本上,我所拥有的是一个线程池,所有这些线程都在忙着工作。我希望他们按照分配的顺序报告他们的结果,但同时,我想分批工作。为了说明,例子是
ExecutorService exec = Executors.newFixedThreadPool(8);
class MyCallable implements Callable<byte[]> {
private final int threadnumber;
MyCallable(int threadnumber){
this.threadnumber = threadnumber;
}
public byte[] call() {
//does something
}
}
List<Callable<byte[]>> callables = new ArrayList<Callable<byte[]>>();
for(int i=1; i<=20; i++) {
callables.add(new MyCallable(i));
}
try {
List<Future<byte[]>> results = exec.invokeAll(callables);
for(Future<byte[]> result: results) {
System.out.write(result.get(), 0, result.get().length);
}
基本上,池线程有 8 个线程,我最终有 20 个任务(这些只是示例)。如果我理解正确的话,它现在的工作方式是等到所有 20 个任务都完成后再按顺序输出它们(从 1 到 20)。这个程序应该做的是输出一个连续的字节流(由线程处理,由于我需要保持顺序不变,所以我使用了未来的接口)。虽然我不介意等到所有 20 个任务都完成后,但无论如何,线程是否可以按顺序简单地输出。
如果没有办法,或者我只是完全误解了 invokeAll 的工作原理,那么也欢迎澄清。提前致谢!执行者有点令人困惑,因为我才刚刚了解它们。
随机附录,我什至可以从可调用对象中返回字节数组吗?