Я застрял с этой следующей проблемой.
Скажем, у меня есть запрос, содержащий 1000 элементов, и я хотел бы использовать Java Executor для его решения.
Вот основной метод
public static void main(String[] args) {
//Assume that I have request object that contain arrayList of names
//and VectorList is container for each request result
ExecutorService threadExecutor = Executors.newFixedThreadPool(3);
Vector<Result> vectorList = new Vector<Result();
for (int i=0;i<request.size();i++) {
threadExecutor.execute(new QueryTask(request.get(i).getNames, vectorList)
}
threadExecutor.shutdown();
response.setResult(vectorList)
}
А вот и класс QueryTask
public QueryTask() implements Runnable {
private String names;
private Vector<Result> vectorList;
public QueryTask(String names, Vector<Result> vectorList) {
this.names = names;
this.vectorList = vectorList;
}
public void run() {
// do something with names, for example, query database
Result result = process names;
//add result to vectorList
vectorList.add(result);
}
}
Итак, основываясь на приведенном выше примере, я хочу создать пул потоков для всех данных в запросе, запустить его одновременно и добавить результат в VectorList.
И в конце процесса я хочу, чтобы все результаты уже были в списке Вектор.
Я продолжаю получать противоречивый результат в ответе.
Например, если я передаю запрос с 10 именами, я получаю только 3 или 4, а иногда и ничего в ответе.
Я ожидал, что если я пройду 10, я получу 10 обратно.
Кто-нибудь знает, в чем причина проблемы?
Любая помощь будет признательна.
Спасибо