Я пытаюсь получить сообщения из facebook с помощью пакетных операций. Я думал о том, чтобы сделать эту задачу многопоточной, чтобы ускорить работу. в основном, им отправляет пакетные запросы в facebook и, ожидая ответа, моя задача выполняет другие действия, которые необходимо выполнить. , когда я отлаживаю задачу (медленно), я получаю результаты 2000, которые хочу получить для теста .... , но когда я запускаю его или позволяю ему отлаживать и приостанавливать после операции запроса, он становится меньше 2000.Почему моя многопоточная задача не работает так, как должна?
String[] str = new String[2000];
ExecutorService exec = Executors.newFixedThreadPool(10);
List<BatchRequest> request= new CopyOnWriteArrayList<BatchRequest>();
List <BatchResponse> batchResponses = new ArrayList<BatchResponse>();
int i=1;
for(int j=0 ; j<2000; j++) {
if (i < 50) {
BatchRequest batch = new BatchRequestBuilder(str[i]).build();
request.add(batch);
i++;
counter++;
} else {
i = 1;
exec.execute(new Runnable() {
//thread that gets information from facebook into a list of responses
public void run() {
// TODO Auto-generated method stub
System.out.println("running");
batchResponses.addAll(fc.executeBatch(request));
System.out.println("done");
}
});
request.clear();
}
}
exec.shutdown();
exec.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
Я удалил все, что не нужно. надеюсь, что это все еще имеет смысл.
Что случилось с моим кодом?
EDIT: ive отредактировал код, чтобы иметь больше смысла. кто угодно?
Возможно, было бы полезно создать пример, иллюстрирующий ту же проблему, что и логика базы данных (т. Е. Вместо rs.next() создать цикл, который повторяется в 2000 раз, и вместо создания массива batchResponses создать массив строк , и т.д.). Это даст нам код, который мы могли бы выполнить и отлаживать напрямую, вместо того, чтобы самим делать эти изменения, чтобы воспроизвести проблему, о которой вы просите. – John