Parallelise calls in the getMarketplace method.
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user