Я новичок в параллельном потоке и пытаюсь создать 1 пример программы, которая рассчитает значение * 100 (от 1 до 100) и сохранит его на карте.Выполняя код, я получаю различный счет на каждой итерации.Возможно, я где-то ошибаюсь, поэтому, пожалуйста, подскажите, кто знает, как это сделать.
code :
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.stream.Collectors;
public class Main{
static int l = 0;
public static void main (String[] args) throws java.lang.Exception {
letsGoParallel();
}
public static int makeSomeMagic(int data) {
l++;
return data * 100;
}
public static void letsGoParallel() {
List<Integer> dataList = new ArrayList<>();
for(int i = 1; i <= 100 ; i++) {
dataList.add(i);
}
Map<Integer, Integer> resultMap = new HashMap<>();
dataList.parallelStream().map(f -> {
Integer xx = 0;
{
xx = makeSomeMagic(f);
}
resultMap.put(f, xx);
return 0;
}).collect(Collectors.toList());
System.out.println("Input Size: " + dataList.size());
System.out.println("Size: " + resultMap.size());
System.out.println("Function Called: " + l);
}
}
Runnable Code
Последний вывод
Размер ввода: 100
Размер: 100
Вызванная функция: 98
При каждом запуске прогон отличается.Я хочу использовать параллельный поток в моем собственном приложении, но из-за этой путаницы / проблемы я не могу.В моем приложении 100-200 уникальных номеров, над которыми нужно выполнить одну и ту же операцию.Короче говоря, есть функция, которая обрабатывает что-то.