1

我希望有一个连续运行的循环,而无需等待循环中的内容。例如,在下面的示例中,我想迭代一个列表并调用一个名为 doSomething() 的方法,一旦调用了 doSomething() 方法,我希望循环继续到第二个项目,第三个项目,以此类推……</p>

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

它可以用轮询器来完成,但我不想用轮询器来做。

提前感谢您的帮助。

4

2 回答 2

5

为此,您需要运行多个线程,以便多个调用可以并行运行。您可以手动执行此操作,但最好使用现有的实用程序,例如ThreadPoolExecutor. 这需要Runnables并并行运行它们。

例如

// 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.

于 2012-11-16T09:49:25.493 回答
1

我通常会建议生成一个新线程,它会为你“做某事”,但这真的取决于“做某事”的作用,你要迭代多少个对象等等......

于 2012-11-16T09:49:06.050 回答