Оптимизация вложенных циклов в Java - альтернатива потокам приводит к другому результатуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Оптимизация вложенных циклов в Java - альтернатива потокам приводит к другому результату

Сообщение Anonymous »

Я пробовал параллельно запускать 13 циклов for в Java и пытался переписать их с помощью DoubleStream. Проблема в том, что вывод, предоставляемый тем же кодом, но с циклами «for», отличается от вывода, предоставляемого альтернативой потоков.
Другая проблема заключается в том, что реализация циклов «for» занимает много времени, и мне нужно его улучшить. Я предполагаю, что потоковый подход неверен, потому что операция, которую я выполняю, является последовательной, а порядок потоков случайным, поэтому обработка выполняется не совсем правильно.
Могу ли я как-нибудь это сделать? получить тот же результат или распараллелить циклы for?
Мой код приведен ниже:
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(a -> {
System.out.println("Iteration " + a + " min var " + wrapperMinVariation.minVariation + "values: " + wrapperMinA.minA + " " + wrapperMinB.minB);
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(b -> {
System.out.println("Iteration " + a +" "+ b +" min var " + wrapperMinVariation.minVariation + "values: " + wrapperMinA.minA + " " + wrapperMinB.minB);
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(c -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(d -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(e -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(f -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(g -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(h -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(m -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(n -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(o -> {
DoubleStream.iterate(0, x -> x + 0.2).limit(5).parallel().forEach(p -> {
double variation = 0;
for (int i = 0; i < wrapper.list.size(); i++) {

// operations with a,b,c,d,e,f,g,h,m,n,o,p

variation += variationPerMatch;
}
double finalVariationMatches = variation / wrapper.list.size();
if (finalVariationMatches < wrapperMinVariation.minVariation) {
wrapperMinA.minA = a;
wrapperMinB.minB = b;
wrapperMinC.minC = c;
wrapperMinD.minD = d;
wrapperMinE.minE = e;
wrapperMinF.minF = f;
wrapperMinG.minG = g;
wrapperMinH.minH = h;
wrapperMinM.minM = m;
wrapperMinN.minN = n;
wrapperMinO.minO = o;
wrapperMinP.minP = p;
wrapperMinVariation.minVariation = finalVariationMatches;
}
});
});
});
});
});
});
});
});
});
});
});
});


Подробнее здесь: https://stackoverflow.com/questions/659 ... ifferent-r
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»