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



מאמר זה יספק לכם ידע מפורט ומקיף כיצד ליישם ממשק BlockingQueue בג'אווה.

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

מהו ממשק BlockingQueue בג'אווה?

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





באיזה רעיון להשתמש עבור Java

תור עדיפות ב- c ++

ממשק BlockingQueue בג'אווה אינו מקבלריקערכים וזרוקNullPointerExceptionאם תנסה לאחסן את ערך ה- null בתור.יישומי Java BlockingQueue הם בטוח לחוטים . כל שיטות התור הן אטומיות באופיין ומשתמשות במנעולים פנימיים או בצורות אחרות של שליטה במקביל.



תרשים כיתת תור Java

ממשק תור Java מרחיב את ממשק האוסף. ממשק האוסף מרחיב את ממשק ה- Iterable. חלק משיעורי הטמעת התורים הנפוצים הם LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,וכו '. AbstractQueue מספק יישום שלד של ממשק התור כדי להפחית את המאמץ ביישום התור.

סוגי BlockingQueue

ה- BlockingQueue הם שני סוגים:



  • תור ללא גבולות: קיבולת התור החוסם תוגדר ל- Integer.MAX_VALUE. במקרה של תור חסימה בלתי מוגבל, התור לעולם לא ייחסם מכיוון שהוא יכול לגדול לגודל גדול מאוד. כשאתה מוסיף אלמנטים זה גודל גדל.

תחביר:
תור חסימת תור לחסימה = חדש LinkedBlockingDeque ()

  • תור מוגבל: הסוג השני של התור הוא התור התוחם. במקרה של התור התוחם ניתן ליצור תור העוקף את קיבולת התור בבנאי התורים:
    תחביר:
    // יוצר תור חוסם עם קיבולת 5

תור לחסימת תור של Blocking = חדש LinkedBlockingDeque (5)

שיטות בממשק BlockingQueue

שנה סוג תחביר השיטה משמש ל תיאור
בוליאני הוסף (E ו-) הַכנָסָה

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

בוליאני מכיל (אובייקט o) לִבחוֹן

מחזירה אמת אם תור זה מכיל את האלמנט שצוין.

int drainTo (אוסף ג) אחזור או הסרה

מסיר את כל האלמנטים הזמינים מתור זה ומוסיף אותם לאוסף הנתון.

int drainTo (אוסף c, int maxElements) אחזור או הסרה

מסיר לכל היותר את המספר הנתון של האלמנטים הזמינים מתור זה ומוסיף אותם לאוסף הנתון.

מה הם מרחבי שמות ב- c ++
בוליאני הצעה (E ו-) הַכנָסָה

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

בוליאני הצעה (E e, פסק זמן ארוך, יחידת TimeUnit) הַכנָסָה

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

IS משאל (פסק זמן ארוך, יחידת TimeUnit) אחזור או הסרה

מאחזר ומסיר את ראש התור הזה, מחכה עד זמן ההמתנה שצוין במידת הצורך כדי שרכיב יהיה זמין.

בָּטֵל לשים (E e) הַכנָסָה

מכניס את האלמנט שצוין לתור זה, ממתין במידת הצורך למרחב שיהיה זמין.

int קיבולת שנותרה () לִבחוֹן

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

בוליאני הסר (אובייקט o) + אחזור או הסרה

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

IS לקחת() אחזור או הסרה

מאחזר ומסיר את ראש התור הזה, ממתין במידת הצורך עד שרכיב יהיה זמין.

ממשק BlockingQueue בג'אווה דוגמה: שירות

חבילה com.journaldev.concurrency לייבא java.util.concurrent.ArrayBlockingQueue לייבא java.util.concurrent.BlockingQueue מחלקה ציבורית ProducerConsumerService {public static void main (String [] args) {// יצירת BlockingQueue בגודל 10 BlockingQueue queue = New ArrayBlocking 10) מפיק מפיק = מפיק חדש (תור) צרכן צרכן = צרכן חדש (תור) // מפיק מתחיל לייצר הודעות בתור חוט חדש (מפיק) .התחל () // מתחיל צרכן לצרוך הודעות מהתור שרשור חדש (צרכן) .start () System.out.println ('המפיק והצרכן התחיל')}}

עם זאת, אנו מגיעים לסוף של המאמר ממשק BlockingQueue ב- Java. אני מקווה שכל המושגים שלך ברורים כעת.

בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורס ההכשרה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועד לסטודנטים ואנשי מקצוע שרוצים להיות מפתח Java. הקורס נועד לתת לך יתרון לתכנות ג'אווה ולהכשיר אותך למושגי ג'אווה מרכזיים ומתקדמים יחד עם מסגרות ג'אווה שונות כמו Hibernate & Spring.

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