У меня есть этот метод:Как вызвать метод в многопоточном способе, который возвращает элементы списка
public List<String> composeList (DataBaseObject dBO) {
List<String> valueList = new ArrayList<>();
for (String separatedFieldName : separatedFieldNames) {
object = PropertyUtils.getProperty(object, separatedFieldName);
valueList.add(object.toString());
}
}
У меня есть список из 1000 объектов ДБЫ и хотел бы назвать этот метод в несколько -простой путь.
Но возвращение этого метода также входит в список
Вот звонящий:
List<List<String>> valueLists = new ArrayList<>();
for (DataBaseObject dBO : listOfDBOs)
valueLists.add(composeList(dBOObject));
Поскольку машины теперь дни имеют несколько ядер, мне было интересно, как я могу использовать их. Например, как я могу вызвать composeList в parellel и сохранить результаты в одном ArrayList.
Я знаю, что могу использовать Collections.SynchronizedList, но тогда время выполнения composeList настолько мало, что я в конечном итоге добавлю элементы в последовательность и даже будучи многопоточными, это все равно будет последовательным выполнением, так как каждый add будет поместите блокировку в Синхронизированный список.
Это может звучать как вопрос дизайна, но все же это связано с программированием. И я был бы очень признателен за любую помощь в этой ситуации.
Я не думаю, что вы можете спокойно записывать объект одновременно. Вы могли бы вызвать свой список во время запуска другой задачи, но не одновременно выполнять два задания одновременно одного и того же списка. Вот почему SynchronizedLists - это, по сути, последовательное поведение, когда это используется, это единственный безопасный способ сделать это. – DonyorM
Как я уже сказал, это не проблема, связанная с населением списка. Может быть, вы тоже можете предложить что-то с дизайном. К сожалению, мне нужно дождаться завершения списка, чтобы следующая задача выполнялась. Таким образом, не может вызвать что-либо еще в среднее время. –
В вашем примере неясно, почему добавление к 'valueList' выходит за пределы цикла. Насколько я понимаю, вы собираетесь добавить все значения всех полей? –