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