Также предостережение перед использованием параллельного потока. Нет. потоков, которые использует ParallelsStream, являются общими для jvm, т.е. они имеют общий пул потоков. Поэтому для расчетов можно использовать параллельный поток, но если в ваших расчетах используются сетевые вызовы, вам следует избегать его, поскольку он заблокирует ваши потоки, и следующие запросы будут находиться в состоянии ожидания до завершения этих задач.
т ,
У меня есть программа, которая работает отлично, к сожалению, у меня есть несколько исчислений, которые занимают много времени, несколько минут ..
Моя цель - использовать многопоточность для ускорения частей, которые занимают так много времени.
В этом примере я даю прототип той части, которую я должен распараллелить
public static ArrayList<Object2> createListOfObject2(ArrayList<Object1> mylist) {
ArrayList<Object2> listToReturn = new ArrayList<>();
Object2 object2;
for (int i = 0; i < mylist.size(); i++) {
for (int j = 0; j < mylist.size(); j++) {
object2 = heavyCalcul(mylist, i, j);
listToReturn.add(object2);
}
}
return listToReturn;
}
private static Object2 heavyCalcul(ArrayList<Object1> mylist, int i, int j) {
int weight = MyCalculator.getInstance().calcul(mylist.get(i),mylist.get(j));
Object2 Object2 = new Object2(weight);
return Object2;
}
Как вы могли видеть, метод
public static ArrayList<Object2> createListOfObject2(ArrayList<Object1> mylist)
получить список Object1, и должен создать еще один список object2.
Я сделал два цикла Loop, и каждый раз, когда я создаю объект 2, формирующийся двумя объектами, это должно занять O (n²) раз.
для большего списка это занимает много времени.
Так, где я должен поместить многопоточный и какой тип списка я должен использовать.
Вторая проблема заключается в том, что класс MyCalculator является одноэлементным классом, и я создаю только один его объект, и, на мой взгляд, даже использование многопоточности реальной программы не принесет пользы многопоточности.
Каким правилам я должен следовать, чтобы использовать многопоточность?
Большое спасибо.