Parallelise calls in the getMarketplace method.

This commit is contained in:
Florian THIERRY
2025-09-18 18:01:49 +02:00
parent 2fe14de357
commit d6a06ba6cd
2 changed files with 23 additions and 1 deletions

View File

@@ -1,11 +1,15 @@
package com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.marketplace;
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.catalog.CatalogService;
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.catalog.model.Catalog;
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.ItemService;
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.item.model.Item;
import com.zeenea.experiments.virtualthreads.virtualthreadsapp.domain.marketplace.model.Marketplace;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Service
public class MarketplaceService {
private final CatalogService catalogService;
@@ -17,6 +21,24 @@ public class MarketplaceService {
}
public Marketplace getMarketplace() {
return getMarketplaceInParallel();
}
private Marketplace getMarketplaceInParallel() {
CompletableFuture<List<Catalog>> getCatalogsFuture = CompletableFuture.supplyAsync(catalogService::getAll);
CompletableFuture<List<Item>> getAllItemsFuture = CompletableFuture.supplyAsync(itemService::getAllItems);
CompletableFuture.allOf(getCatalogsFuture, getAllItemsFuture).join();
var catalogs = getCatalogsFuture.join();
var sharedItems = getAllItemsFuture.join()
.stream()
.filter(Item::isShared)
.toList();
return new Marketplace(catalogs, sharedItems);
}
private Marketplace getMarketplaceSequentially() {
return new Marketplace(
catalogService.getAll(),
itemService.getAllItems()