logo

ניתן להתקשר מול עתיד ב-Java

ב-Java ריבוי שרשורים מאפשר הפעלת משימות במקביל ומשפר את הביצועים וההיענות. באופן מסורתי מפתחים השתמשו בממשק Runnable כדי להגדיר משימות אבל יש לו שתי מגבלות עיקריות: הוא לא יכול להחזיר תוצאה ולא יכול לזרוק חריגים מסומנים. כדי להתגבר על אלה הציגה Java את ממשקי Callable ו-Future ב-Java 5.

ממשק הניתן להתקשרות

ה ממשק הניתן להתקשרות מייצג משימה שמחזירה תוצאה ועלולה לגרום לחריגה. זה דומה ל- Runnable אבל גמיש יותר מכיוון שהוא יכול להחזיר ערך ולזרוק חריגים מסומנים.

Java
import java.util.concurrent.*; public class CallableExample {  public static void main(String[] args) throws Exception {  ExecutorService executor = Executors.newSingleThreadExecutor();  Callable<Integer> task = () -> {  int sum = 0;  for (int i = 1; i <= 5; i++) sum += i;  return sum; // returns result  };  Future<Integer> future = executor.submit(task);  System.out.println('Result: ' + future.get());   executor.shutdown();  } } 

תְפוּקָה
Result: 15 

הֶסבֵּר: משימה ניתנת להתקשרות מוגשת למבצע. הוא מחשב את סכום המספרים מ-1 עד 5 ומחזיר את התוצאה. התוצאה מאוחזרת באמצעות future.get() לאחר סיום המשימה.



ממשק עתידי

ה ממשק עתידי מייצג את התוצאה של חישוב אסינכרוני. כאשר אתה שולח משימה ניתנת להתקשרות או הרצה ל-ExecutorService, היא מחזירה אובייקט Future.

Java
import java.util.concurrent.*; public class CallableFutureExample {  public static void main(String[] args) {  ExecutorService executor = Executors.newSingleThreadExecutor();  Future<Integer> future = executor.submit(() -> 10 + 20);  try {  Integer result = future.get(); // waits but returns instantly  System.out.println('Result: ' + result);  } catch (Exception e) {  e.printStackTrace();  } finally {  executor.shutdown();  }  } } 

תְפוּקָה
Result: 30 

הֶסבֵּר: הCallableמחשבי משימה10 + 2 and ExecutorService.submit()שיטה מחזירה אFutureלְהִתְנַגֵד. באמצעותfuture.get()אנו מקבלים את התוצאה לאחר שהחישוב יסתיים.

ניתן להתקשר מול עתיד

תכונהניתן להתקשרותעָתִידִי
מַטָרָה מייצג משימה שמחזירה תוצאהמייצג את התוצאה של משימה אסינכרונית
סוג החזרה מחזיר תוצאה בעת ביצועמחזיק את התוצאה שהוחזרה על ידי Callable
מוגדר ב חבילת java.util.concurrentחבילת java.util.concurrent
הוֹצָאָה לְפוֹעַל הוגש ל-ExecutorServiceהוחזר על ידי ExecutorService.submit()
שיטות בעל שיטה אחת קריאה ()יש שיטות כמו get() isDone() cancel()
טיפול חריג יכול לזרוק חריגים מסומניםמטפל בתוצאות וחריגים לאחר ביצוע
נוֹהָג מגדיר מה לבצעשולט מנטר ומחזיר את התוצאה של משימה
צור חידון