加速顺序java迭代器可能吗?

com*_*tta 1 java java-ee

这就是我通常迭代一个集合的方式

 for(Iterator iterator = collectionthing.iterator(); iterator.hasNext();){
Run Code Online (Sandbox Code Playgroud)

我相信大多数人这样做,我想知道有没有比顺序迭代更好的方法?有没有任何java库..我可以通过多代码cpu使这个并行执行?=)

期待大家的反馈.

cle*_*tus 7

Java的多线程在这方面水平相当低.你能做的最好的是这样的:

ExecutorService executor = Executors.newFixedThreadPool(10);
for (final Object item : collectionThingy) {
  executor.submit(new Runnable() {
    @Override
    public void run() {
      // do stuff with item
    }
  });
}
executor.shutdown();
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
Run Code Online (Sandbox Code Playgroud)

这是Java 6代码.如果在Java 5上运行,则删除@Override注释(它不适用于在Java 5中实现接口的对象,但在Java 6中也是如此).

这样做是为集合中的每个项目创建任务.创建一个线程池(大小为10)来运行这些任务).你可以用任何你想要的东西替换它.最后,线程池被关闭,代码块等待所有任务完成.

最后一个至少有一两个例外,你需要抓住.在猜测,InterruptedExceptionExecutionException.

  • @cometta:如果你不调用`awaitTermination`那么"main"线程根本不会阻塞等待任务,它将继续下一步的代码.如果你不调用`shutdown`那么awaitTermination永远不会返回.两者都是必需的. (3认同)