我想有一个连续运行的循环而不需要等待循环中的东西。例如,在下面的示例中,我想迭代一个列表并调用一个名为doSomething()的方法,并且一旦调用了doSomething()方法,我希望循环继续到第二个项目,第三个项目,等......
while(it.hasNext())
{
MyObject obj = (MyObject)it.next();
doSomething(obj);
}
可以使用轮询器完成,但我不想使用轮询器。
提前感谢您的帮助。
答案 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'做什么,你要迭代多少个对象等等......