@SankaSanka

Как распараллелить работу с мапой?

есть метод который принимает сет, работает с ним, получает два результата и записывает их в мапу.
хочу его разбить процесс получения результатов на два потока.
вот что у меня есть сейчас:

public class IndexedThread implements Runnable {
	private final Set<String> strSet;

	public IndexedThread(Set<String> strSet) {
		this.strSet = strSet;
	}
	@Override
	public void run() {
		for (String s : strSet) {
         //работаем работу
}
    map.put(str, newstr);
    }
}


private Map<String, String> makework(Set<String> wordFromFile) {
        Map<String, String> map = new ConcurrentHashMap<String, String>();
IndexedThread thread = new IndexedThread(str);
               thread.start();

 for (String str : wordFromFile) {
//работаем другую работу
map.put(str, newstr2);
}
return map;
}


как это по человечески доделать подскажите пожалуйста.
2 "работы" в методе между собой никак не связанны.
2 разных действия нужно сделать с каждым элементом сета.
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
В java 8+ многопоточность достигается гораздо более понятным и простым способом:
// Java 11
public class ParallelMapDemo {

    public static void main(String[] args) {
        var inputSet = Set.of(1, 2, 3, 4, 5);

        var result = inputSet.parallelStream()
                .collect(Collectors.toMap(Function.identity(), ParallelMapDemo::doSomething));
    }

    static String doSomething(Integer i) {
        //  Do Something
        return i.toString();
    }

}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы