我正在使用java Callable 和 ExecutorService 执行计算:
ExecutorService threadExecutor = Executors.newCachedThreadPool();
for (TaskCallable task: tasks) {
threadExecutor.submit(task);
}
我想让任务最多运行2分钟。但如果我打电话:
task.get(2, TimeUnit.MINUTES);
那么它会立即阻止!并且不要让我为其他任务分配超时,直到超时结束。
我可以用
threadExecutor.invokeAll(tasks, 2, TimeUnit.MINUTES);
但它会返回未来列表,我不知道哪个任务属于哪个Future。
答案 0 :(得分:0)
使用Try this:-
private boolean mHasRequestedMore;
private int preLast;
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (!mHasRequestedMore) {
final int lastItem = firstVisibleItem + visibleItemCount;
if (lastItem == totalItemCount)
{
if (preLast != lastItem) {
preLast = lastItem;
loadMore();
}
}
}
}
);
。来自docs:
阻止所有任务在关闭后完成执行 请求,或发生超时,或当前线程被中断, 以先到者为准。
awaitTermination
答案 1 :(得分:0)
你可以使用invokeAll,因为文档说:
返回:
表示任务的Futures列表,与迭代器为给定任务列表生成的顺序相同,每个都已完成。
当你记住两件事时,一切都按预期工作: