Java连续循环(循环无需等待)

时间:2012-11-16 09:40:36

标签: java iterator while-loop

我想有一个连续运行的循环而不需要等待循环中的东西。例如,在下面的示例中,我想迭代一个列表并调用一个名为doS​​omething()的方法,并且一旦调用了doSomething()方法,我希望循环继续到第二个项目,第三个项目,等......

 while(it.hasNext())
 {
    MyObject obj = (MyObject)it.next();
    doSomething(obj);
 }

可以使用轮询器完成,但我不想使用轮询器。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

为了做到这一点,你需要运行多个线程,这样多个调用可以并行运行。您可以手动执行此操作,但使用现有实用程序(例如ThreadPoolExecutor)要好得多。这需要Runnables并且并行运行它们。

E.g。

// Create an executor that can run up to 10 jobs in parallel.
ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 5, TimeUnit.Seconds, new LinkedBlockingQueue());
while(it.hasNext()) {
    // NB: Final is needed so that this can be accessed within the anonymous inner class
    final MyObject obj = (MyObject)it.next();
    // Queue up the doSomething to be run by one of the 10 threads
    executor.execute(new Runnable() {
        public void run() {
            doSomething(obj);
        }
    }
}

使用此代码,所有循环都会安排执行doSomething方法。完成后,它将继续执行下一次执行。实际的doSomething由ThreadPoolExecutor管理的10个线程之一运行。

答案 1 :(得分:1)

我通常会建议产生一个新的线程,它会为你做'doSomething',但它真的取决于'doSomething'做什么,你要迭代多少个对象等等......