Chłopaki! Mam pytanie: co robi ten kod:
Collection<Contract.class> contracts = fillTheCollectionFromDb();
contracts.stream().filter(condition)
.map(contractItem ->
CompletableFuture.supplyAsync(() ->
{T result = getAnotherDataFromDb(contractItem);
return result;}, Executor.class)
)//end .map
.map(CompletableFuture::join).collect(Collectors.toList());
3
Alex
22 listopad 2018, 19:33
Jaki to język programowania? Wygląda jak Java, ale ".class" jest używane niepoprawnie w obu przypadkach.
– Alexei Kaigorodov
22 listopad 2018, 20:05
Java + wiosenny rozruch. Na przykład rozszerzenie .class.
– Alex
22 listopad 2018, 23:33
1 odpowiedź
Najlepsza odpowiedź
Ten kod jest odpowiednikiem:
Collection<Contract> contracts = fillTheCollectionFromDb();
contracts.stream().filter(condition)
.map(this::getAnotherDataFromDb)
.collect(Collectors.toList());
Aby ten program był naprawdę równoległy, należy go zmodyfikować. Najpierw uruchom równolegle wszystkie żądania do bazy danych:
Collection<Contract> contracts = fillTheCollectionFromDb();
List<CompletableFuture> futures = contracts.stream().filter(condition)
.map(contractItem ->
CompletableFuture.supplyAsync(
()->getAnotherDataFromDb(contractItem),
executor)
)//end .map
.collect(Collectors.toList());
I dopiero potem zbierz wszystkie wyniki:
List results = futures.stream
.map(CompletableFuture::join)
.collect(Collectors.toList());
6
Alexei Kaigorodov
23 listopad 2018, 07:45
Podobne pytania
Nowe pytania
concurrency
W informatyce współbieżność jest właściwością systemów, w których można wykonywać wiele obliczeń w nakładających się okresach czasu. Obliczenia mogą być wykonywane na wielu rdzeniach w tym samym chipie, wątkach z wyprzedzeniem współdzielonych w czasie na tym samym procesorze lub wykonywane na fizycznie oddzielonych procesorach.