כיצד ליישם ממשק הניתן להתקשרות בג'אווה



מאמר זה יספק לכם ידע מפורט ומקיף על אופן יישום הממשק הניתן להתקשרות ב- Java עם דוגמאות.

תוכניות ריבוי ניווט של ג'אווה עולות לשימוש בתוכנות נרחבות ניתן להתקשר ולעתיד. על פי הידיעה המוקדמת של נושאים ושרשור רב, הקוראים יוכלו להבין טוב יותר את הדיון במאמר זה. כפי שאסביר בממשק להתקשר בג'אווה במאמר זה.

סיכום על אשכולות

עם זאת, הרשו לי רק לתת הקדמה קצרה למושג החוטים. חוט הוא מסלול ביצוע נפרד, במקרה שתצטרכו לבצע משימה חוזרת, ניתן לפרק את העבודה למספר משימות ולהקצות אותן לשרשורים. רב השחלהאינו אלא הקצאת מספר שרשורים לביצוע משימות שונות במקביל כדי לקבל את התוצאה במהירות.





מהו ממשק הניתן להתקשרות בג'אווה

עבור Java 5 הוצג המחלקה 'java.util.concurrent'. ממשק קריא זה הובא באמצעות חבילת המקביליות שנראתה דומה לממשק Runnable. זה גם יכול להחזיר כל אובייקט והוא מסוגל לזרוק חריג. ממשק Java Callable משתמש ב- Generics ובכך מאפשר להחזיר כל סוג של אובייקט. Framework Framework נותנת שיטת submit () לביצוע יישומים הניתנים להתקשרות במאגר שרשורים. במציאות, ה- Java Executor Framework מקפיד על דפוסי WorkerThread.

java-interfaceבמאגר חוטים משתמשים יכולים ליזום שרשורים באמצעות שיטת Executors.newFixedThreadPool (10) ובהתאם להגיש לה משימה. ריצה פועלת כמטרה לשרשור ושיטת ריצה בטלנית ציבורית () מבוצעת באופן חובה כדי להגדיר את המשימה. זה יבוצע על ידי אשכולות במאגר האשכולות. בהתבסס על זמינות האשכולות בבריכה, Framework Framework מקצה עבודה (יעד הניתן לריצה) לשרשורים.אם כל הנושאים נמצאים בשימוש, יש לעצור את המשימה. לאחר שהשרשור משלים משימה אחת ואז הוא חוזר למאגר כחוטר זמין, שמוכן לקבל משימות עתידיות. Callable דומה ל- Runnable ויכול להחזיר כל סוג של אובייקט כאשר אנו רוצים לקבל תוצאה או סטטוס מהמשימה.



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

Java Callable מחזיר java.util.concurrent. Java Future מציעה שיטת ביטול () לחיסול המשימה הניתנת להתקשרות. זו גרסה עמוסה יתר על המידה של שיטת get (), בה ניתן לציין זמן מסוים לחכות לתוצאה. כדאי להימנע משרשור הנוכחי, העלול להיחסם לתקופה ארוכה יותר. אנא זכור כי שיטת ה- get היא שיטה סינכרונית ועד שה- callable מסיים את משימתו ומחזיר ערך, הוא יצטרך להמתין ל callable.

ישנן גם שיטות 'isDone ()' ו- 'isCancelled () כדי להשיג את המצב הנוכחי של משימה הניתנת להתקשרות. שקול את הדוגמה שבה צריך למצוא סכום של כל המספרים מאחד עד 100. אנו יכולים לולאה 1 עד 100 ברצף ולהוסיף אותם לבסוף. אפשרות אחרת היא על ידי חלוקה וכיבוש. בשיטה זו נוכל לקבץ את המספרים באופן כזה שלכל קבוצה יש בדיוק שני אלמנטים. לבסוף, אנו יכולים להקצות קבוצה זו למאגר שרשורים. לכן, כל שרשור מחזיר סכום חלקי במקביל ואז אוסף את הסכומים החלקיים הללו ומוסיף אותם כדי לקבל את הסכום השלם.



java קבל תאריך ממחרוזת

תכונות של Callable ו- Future Class

  • מחלקה הניתנת להתקשרות היא ממשק מסוג SAM ולכן ניתן ליישם אותו בביטוי למבדה.

  • למחלקה הניתנת להתקשרות יש רק שיטה אחת 'call ()' המכילה את כל הקוד הדרוש לביצוע בצורה אסינכרונית.

  • בסביבת ממשק הניתנת לניהול, לא הייתה אפשרות להחזיר את תוצאת החישוב או להוציא חריג מסומן. ואילו עם Callable ניתן להחזיר ערך ולזרוק חריג מסומן.

  • ניתן להשתמש בשיטת Get () במחלקה עתידית בכדי לאחזר תוצאות לאחר חישוב. משתמשים יכולים גם לבדוק אם החישוב הסתיים או לא באמצעות שיטת done ().

  • ביטול החישוב באמצעות שיטת future.cancel () מהווה יתרון גם ביישומים מסוימים.

  • Get () נקרא שיחת חסימה והוא ממשיך לחסום עד לסיום החישוב.

השוואה בין כיתות הניתנות להתקשרות וניתנות לריצה

ניתן להתקשר ניתן לרוץ
זה חלק מה' java.util.concurrent ' חבילה מאז Java 1.5זה חלק מחבילת java.lang מאז Java 1.0
ממשק עם פרמטרים, כגון Callableממשק שאינו פרמטרי
מסוגל לזרוק חריג מסומןזה לא יכול לזרוק חריג מסומן
הוא מכיל שיטה אחת, call (), שמחזירה את סוג V, זהה לפרמטר הממשק המוגדר 'Type'כאן היא מכילה שיטה אחת, הנקראת run (), ומחזירה בטל

להלן דוגמה פשוטה למחלקה הניתנת להתקשרות בג'אווה המיושמת כאשר הקוד מחזיר את שם השרשור הספציפי, שמבצע את המשימה לאחר שנייה אחת. כאן אנו משתמשים במסגרת החילוץ לביצוע 100 משימות במקביל ל- Java Future לתוצאת המשימות שהוגשו. קטע הקוד הראשון הוא הפלט ולמטה מייצג את הקוד.

חבילה com.journaldev.threads ייבא java.util.ArrayList ייבוא ​​java.util.Date ייבוא ​​java.util.List ייבוא ​​java.util.concurrent.Callable ייבוא ​​java.util.concurrent.ExecutionException ייבוא ​​java.util.concurrent.ExecutorService ייבוא ​​java .util.concurrent.Executors מייבאים java.util.concurrent.Future public class MyCallable מיישמים הניתנים להתקשרות {@Override public שיחת מחרוזת () זורקת יוצא מן הכלל {Thread.sleep (1000) // להחזיר את שם החוט שמבצע את המשימה הניתנת לקריאה להחזיר Thread.currentThread () .getName ()} ראשי ריק סטטי ציבורי (ארגומנטים מחרוזת []) {// קבל את ExecutorService ממחלקת השירות Executors, גודל מאגר החוטים הוא 10 ExecutorService executor = Executors.newFixedThreadPool (10) // צור רשימה שתחזיק את העתיד אובייקט המשויך לרשימה הניתנת להתקשרותרשימה = ArrayList חדש() // צור מופע MyCallable ניתן להתקשר אליו = MyCallable חדש () עבור (int i = 0 i<100 i++){ //submit Callable tasks to be executed by thread pool Future future = executor.submit(callable) //add Future to the list, we can get return value using Future list.add(future) } for(Future fut : list){ try { //print the return value of Future, notice the output delay in console // because Future.get() waits for task to get completed System.out.println(new Date()+ '::'+fut.get()) } catch (InterruptedException | ExecutionException e) { e.printStackTrace() } } //shut down the executor service now executor.shutdown() } } 

השבתת שירותי ההוצאה לפועל

ההיבט המכריע והחשוב שחסרים מפתחים רבים הוא כיבוי ה- ExecutorService. שירות ExecutorService הוא חיוני והוא נוצר עם אלמנטים נוספים של שרשור. זכור כי ה- JVM נעצר רק כאשר כל השרשורים שאינם שדים נעצרים. כך פשוט כיבוי שירות ההוצאה לפועל מונע מ- JVM להפסיק.

על מנת לומר לשירות ההוצאה לפועל כי אין צורך בהפעלת האשכולות, עלינו לכבות את השירות.

ישנן שלוש דרכים להפעיל את הכיבוי:

רצף פיבונאי c ++
  • כיבוי בטל () - פעולה זו יוזמת כיבוי מסודר בו מבוצעות משימות שהוגשו בעבר, אך לא מתקבלות משימות חדשות.
  • כיבוי רשימה עכשיו () - הוא מנסה לעצור את כל הפעולות הפעילות באופן פעיל, מפסיק את עיבוד המשימות הממתינות ומחזיר רשימה של המשימות שחיכו לביצוע.
  • בטל ממתינים () - פעולה זו ממשיכה להיחסם עד לסיום הביצוע של כל המשימות לאחר בקשת כיבוי, או להתרחשות פסק הזמן. זה גם נחסם כאשר החוט הנוכחי נקטע. הכל תלוי איזו משימה באה קודם.

עם זאת, אנו מגיעים לסוף המאמר של ממשק הניתן להתקשרות בג'אווה. אני מקווה שקיבלתם הבנה לגבי העתיד והממשק הניתן להתקשרות בג'אווה.

בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java.

יש לך שאלה עבורנו? אנא הזכיר זאת בסעיף ההערות בבלוג 'ממשק הניתן להתקשרות בג'אווה' ונחזור אליך בהקדם האפשרי.