Sobes.tech
Middle

Ինչու է անհրաժեշտ CompletableFuture-ը Java-ում?

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());