Sobes.tech
Middle

რა არის CompletableFuture?

sobes.tech AI

პასუხი AI-სგან

CompletableFuture Java 8+-ში Future მოდელის გაფართოებაა, რომელიც აძლიერებს ასინქრონული პროგრამირების და დავალებების კომპოზიციის შესაძლებლობებს.

იგი ახორციელებს CompletionStage და Future ინტერფეისებს. CompletionStage განსაზღვრავს კონტრაქტს ასინქრონული გამ executing და კომპოზიციისთვის.

ძირითადი მახასიათებლები:

  • ნებროკინგ ოპერაციები: საშუალებას აძლევს დავალებების ასინქრონულად შესრულებას, არ ბლოკავს მთავარი ნაკადის მუშაობას.
  • კომპოზიცია: უზრუნველყოფს rico API-ს შედეგების დაკავშირებისა და გაერთიანებისთვის მრავალი ასინქრონული ოპერაციის.
  • შეცდომების მართვა: ინტეგრირებული მექანიზმები შეცდომების მართვისთვის ასინქრონულ ნაკადებში.
  • შექმნა: შესაძლებელია შექმნათ დასრულებული, არასრულყოფილი ან შეცდომიანი CompletableFuture.
  • მოკიდებულებები: საშუალებას აძლევს შექმნათ დამოკიდებული დავალებების ჯაჭვები, სადაც ერთი შესრულება დამოკიდებულია მეორე დასრულებაზე.
  • პარალელური შესრულება: მეთოდები allOf და anyOf მრავალი დავალების პარალელურად შესრულებისთვის.

გამოყენების მაგალითები:

  1. შექმნა და დასრულება:

    // დასრულებული CompletableFuture-ის შექმნა
    CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Hello");
    
    // არასრულყოფილი CompletableFuture-ის შექმნა და მისი მოგვიანებით დასრულება
    CompletableFuture<String> future = new CompletableFuture<>();
    // ... ასინქრონული სამუშაოს შესრულება ...
    future.complete("Done");
    // ან შეცდომის შემთხვევაში
    // future.completeExceptionally(new RuntimeException("Error"));
    
  2. ასინქრონული დავალების შესრულება:

    CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> {
        // ასინქრონული სამუშაო (მაგალითად, ფაილის წაკითხვა, ქსელის მოთხოვნა)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return "Async Result";
    });
    
  3. კომპოზიცია thenApply-თან:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // შედეგი წინამორბედი ნაბიჯის ფუნქციაში
    
  4. კომპოზიცია thenCombine-თან:

    CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
    
    CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // ორი CompletableFuture-ის შედეგების გაერთიანება
    
  5. დასრულების დამუშავება thenAccept-ით:

    CompletableFuture.supplyAsync(() -> "Final result")
        .thenAccept(result -> System.out.println("Task finished with result: " + result)); // მოქმედების შესრულება დასრულების შემდეგ, მნიშვნელობის დაბრუნების გარეშე
    
  6. შეცდომების დამუშავება exceptionally-ით:

    CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> {
        throw new RuntimeException("Something went wrong");
    }).exceptionally(ex -> {
        System.err.println("Error occurred: " + ex.getMessage());
        return "Default Value"; // მნიშვნელობის დაბრუნება შეცდომის დროს
    });
    

CompletableFuture მნიშვნელოვნად ამარტივებს ასინქრონული და ნებროკინგი კოდის დაწერას Java-ში, რაც მას უფრო ადვილად წასაკითხს და შენარჩუნებადს ხდის, ვიდრე ტრადიციული callback-ები ან ბლოკირებადი Future.get()-ის გამოძახებები.