Middle
Ինչու է անհրաժեշտ CompletableFuture-ը Java-ում?
sobes.tech AI
Պատասխան AI-ից
CompletableFuture օգտագործվում է ասինխրոն գործառույթների կատարման և ասինխրոն օպերացիաների կոմպոզիցիայի համար: Այն ներկայացնում է ասինխրոն օպերացիայի արդյունքը, որը կարող է ավարտվել ապագայում:
Հիմնական առավելությունները և օգտագործման պատճառները՝
- Ասինխրոն կատարմամբ: Հնարավորություն է տալիս գործառույթները կատարել ֆոնային ռեժիմում, առանց հիմնական հոսքը խոչընդոտելու:
- Ասինխրոն օպերացիաների կոմպոզիցիա: Հնարավորություն է տալիս միացնել մի քանի ասինխրոն գործառույթներ, որոշելով, թե ինչպես պետք է կատարվեն հերթով կամ параллельно, և մշակել դրանց արդյունքները:
- Անհատականացման մշակումը: Պատրաստված է մեխանիզմներ սխալների մշակման համար:
- Բազմակողմանիություն: Պատրաստված է տարբեր մեթոդներ օգտագործելու համար արդյունքի մշակման համար (օրինակ՝ ֆունկցիայի կիրառումը, հաջորդ գործառույթի կատարմամբ) և կատարման հոսքերի սահմանման համար:
Օգտագործման օրինակներ՝
-
Բազմաթիվ անկախ գործառույթների կատարման և դրանց ավարտի սպասման օրինակ՝
// Երկու գործառույթների համաժամանակյա կատարման օրինակ 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(); // Սպասում երկու գործառույթների ավարտին -
Հետևյալ ասինխրոն գործողությունների կատարման օրինակ՝
// Հետևյալ գործառույթների օրինակ CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Սկզբնական արժեք"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Արդյունքի փոխակերպում return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Տողի երկարությունը՝ " + length); }); -
Ասինխրոն գործառույթների սխալների մշակումը՝
// Սխալների մշակման օրինակ CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Սխալ է տեղի ունեցել"); } return "Հաջողություն"; }).exceptionally(ex -> { System.err.println("Սխալի մշակումը՝ " + ex.getMessage()); return "Մշակված սխալ"; // պահեստային արժեք }); System.out.println(errorFuture.join());