package dev.elaine.concurrency;

import java.time.Duration;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;

public final class CompletableFutureSample {
    private CompletableFutureSample() {
    }

    public static CompletableFuture<String> loadGreeting(String name, Executor executor, Duration timeout) {
        return CompletableFuture.supplyAsync(() -> "你好，" + name, executor)
                .thenApply(String::trim)
                .orTimeout(timeout.toMillis(), TimeUnit.MILLISECONDS)
                .exceptionally(exception -> "服务暂不可用");
    }

    public static void main(String[] args) {
        try (var executor = java.util.concurrent.Executors.newFixedThreadPool(2)) {
            String result = loadGreeting("并发学习者", executor, Duration.ofSeconds(1)).join();
            System.out.println(result);
        }
    }
}
