Sobes.tech
Middle

Java-ში CompletableFuture-ს რა საჭიროა?

sobes.tech AI

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

CompletableFuture გამოიყენება ასინქრონული დავალებების შესრულებისა და ასინქრონული ოპერაციების კომპოზიციისთვის. ის წარმოადგენს ასინქრონული ოპერაციის შედეგს, რომელიც შეიძლება დასრულდეს მომავალში:

ძირითადი უპირატესობები და გამოყენების მიზეზები:

  • ასინქრონული შესრულება: საშუალებას აძლევს დავალებების შესრულებას ფონის რეჟიმში, ძირითადი ნაკადის დაბლოკვის გარეშე.
  • ასინქრონული ოპერაციების კომპოზიცია: იძლევა შესაძლებლობას დაკავშიროს რამდენიმე ასინქრონული დავალება, განსაზღვროს როგორ უნდა შესრულდეს ისინი თანმიმდევრობით ან პარალელურად, და პროცესორ შედეგებს.
  • შეცდომების დამუშავება: უზრუნველყოფს მექანიზმებს შეცდომების დამუშავებისთვის ასინქრონული დავალებების დროს.
  • სხვადასხვა მეთოდების მხარდაჭერა: შედეგის დამუშავებისთვის (მაგ., ფუნქციის გამოყენება, შემდეგი დავალების შესრულება) და შესრულების ნაკადების განსაზღვრისთვის.

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

  1. რამდენიმე დამოუკიდებელი დავალების პარალელურად შესრულება და მათი დასრულების მოლოდინი:

    // ორი დავალების პარალელური შესრულების მაგალითი
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
        // ხანგრძლივი ოპერაცია 1
        return "შედეგი 1";
    });
    
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
        // ხანგრძლივი ოპერაცია 2
        return "შედეგი 2";
    });
    
    CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2);
    
    combinedFuture.join(); // ორივე დავალების დასრულების მოლოდინი
    
  2. თანმიმდევრობით ასინქრონული ოპერაციების შესრულება:

    // მაგალითი თანმიმდევრობით შესრულებული დავალებების
    CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "საწყისი მნიშვნელობა");
    
    CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> {
        // შედეგის გარდაქმნა
        return result.length();
    });
    
    transformedFuture.thenAccept(length -> {
        System.out.println("სტრინგის სიგრძე: " + length);
    });
    
  3. შეცდომების დამუშავება:

    // შეცდომების დამუშავების მაგალითი
    CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> {
        if (true) {
            throw new RuntimeException("შეცდომა მოხდა");
        }
        return "წარმატება";
    }).exceptionally(ex -> {
        System.err.println("შეცდომის დამუშავება: " + ex.getMessage());
        return "დამუშავებული შეცდომა"; // ჩანაცვლებითი მნიშვნელობა
    });
    
    System.out.println(errorFuture.join());