在 foreach 循环中,我调用了一个方法:
for (Iterable pl : ilist) {
myMethod();
}
myMethod() 对于当前(如几分钟或几天)p1 对象可能需要很长时间,但在执行时我想继续下一次迭代。(据我所知,这可以称为异步调用)
甚至可以使用 foreach 循环吗?
在 foreach 循环中,我调用了一个方法:
for (Iterable pl : ilist) {
myMethod();
}
myMethod() 对于当前(如几分钟或几天)p1 对象可能需要很长时间,但在执行时我想继续下一次迭代。(据我所知,这可以称为异步调用)
甚至可以使用 foreach 循环吗?
如果您想安排这些任务异步完成,您可以创建一个新的 Runnable 并将其交给 ExecutorService 以在另一个线程上运行该操作。现在您需要知道如何处理此任务的结果。
// ExecutorService Thread Pool with 10 threads
ExecutorService executor = Executors.newFixedThreadPool(10);
public void iterate(Collection<?> collection) {
for (Object o : collection) {
executor.execute(createTask(o));
}
}
public Runnable createTask(final Object o) {
return new Runnable() {
public void run() {
// do task.
}
};
}
您将希望查看 Callable 和 Future 以获得更复杂的信息。
您需要做的就是为Thread
循环的每次迭代生成一个新的。我可能会这样做。
for ( /* whatever */ ) {
new Thread() {
public void run() {
myMethod();
}
}.start();
}