מהו המתן והודיע ​​ב- Java?



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

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

אדון בנושאים בסדר הבא:





בואו נתחיל!

מהי סנכרון חוטים?

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



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

מהן שיטות Wait () ו- Notify ()?

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

מיזוג pseudocode מיון c ++

לַחֲכוֹת()

שיטה זו גורמת לשרשור לחכות עד לשרשור אחר הקורא לשיטות notify () ו- notifyAll () עבור אובייקט זה. שיטת Wait () זו אומרת לשרשור המתקשר לשחרר נעילה וללכת לישון עד ששרשור אחר נכנס לאותו צג וקורא להודיע ​​(). שיטה זו משחררת את הנעילה לפני ההמתנה ורוכשת מחדש את הנעילה לפני שחוזרת משיטת ההמתנה ().



שיטת המתן () משולבת היטב במנעול הסנכרון. זה נעשה על ידי שימוש בתכונה שאינה זמינה ישירות ממנגנון הסנכרון.

תחביר:

מסונכרן (lockObject) {while (! condition) {lockObject.wait ()} // בצע את הפעולה כאן}

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

לְהוֹדִיעַ()

שיטה זו משמשת כדי להודיע ​​ל- שהוא צריך לתפקד. הוא מעיר חוט אחד שקרא לַחֲכוֹת() שיטה על אותו אובייקט.

שים לב כי מתקשר לְהוֹדִיעַ() בסופו של דבר לא מוותר על נעילה. זה אומר חוט המתנה שהוא יכול להתעורר. עם זאת, המנעול לא מוותר בפועל עד להשלמת החסימה המסונכרנת של המודיע. עכשיו תגיד, אם אתה מתקשר לְהוֹדִיעַ() על משאב אך המודיע עדיין צריך לבצע פעולות במשך 10 שניות בתוך החסימה המסונכרנת שלו, השרשור שחיכה יצטרך לחכות לפחות לעוד 10 שניות נוספות כדי שהמודיע ישחרר את הנעילה על האובייקט, למרות שהוא יודיע () נקרא.

תחביר:

מסונכרן (lockObject) {// establish_the_condition lockObject.notify () // כל קוד נוסף במידת הצורך}

NotifyAll ()

שיטה זו משמשת להעיר את כל החוטים שקראו לחכות () על אותו אובייקט. חוט העדיפות הגבוה ביותר יופעל תחילה ברוב המצב למרות שהוא לא מובטח. דברים אחרים זהים לשיטת notify ().

מדוע ואיך להשתמש ב- Wait () and Notify () ב- Java?

עליך להשתמש בהמתנה והודעה ב- כי הם קשורים למנעול ולאובייקט יש מנעול. למרות שהמתנה והודעה בג'אווה הם מושג בסיסי למדי, הם מוגדרים ב מחלקת חפצים . באופן מפתיע, לא כל כך קל לכתוב את הקוד באמצעות המתנה והודעה. אתה יכול לבדוק זאת על ידי כתיבת קוד כדי לפתור את בעיית היצרן והצרכן באמצעות המתנה והודעה. דוגמה לצרכן של המפיק - המתן והודיע ​​ב- Java-Edurekaהנה, יש לי שיתוף תוֹר ושני חוטיםשקוראים לו יַצרָן ו צרכן . יַצרָן שרשור מכניס את המספר לתור משותף ו צרכן שרשור צורכת את המספרים מהדלי המשותף.

התנאי הוא שברגע שייוצר פריט, יש להודיע ​​על חוט הצרכן ובדומה, לאחר שנדרש להודיע ​​על חוט יצרן הצריכה. השרשור הזהתִקשׁוֹרֶתמושגת באמצעות המתנה והודעה ב- Java.

הערה : W.ait ולאשיטות tify מוגדרות במחלקת האובייקטים, והם חייבים להיקרא בתוך בלוק מסונכרן.

דוגמא

class class Thread1 {public static void main (String [] args) {Thread2 b = Thread2 new) (b) start () מסונכרן (b) {try {System.out.println ('מחכה ל -2 כדי להשלים ...' ) b.wait ()} לתפוס (InterruptedException e) {e.printStackTrace ()} System.out.println ('סה'כ הוא:' + b.total)}} class Thread2 מרחיב Thread1 {int סה'כ @Override ריקה בטלה ציבורית () {מסונכרן (זה) {עבור (int i = 0 i<=100 i++) { total += i } notify() }}}

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

תְפוּקָה:

זה מביא אותנו לסוף מאמר זה בו למדנו את על המתנה והודע ב- Java.אני מקווה שהתוכן הנ'ל הוכיח את עצמו כמועיל בשיפור התוכן שלך יֶדַע. המשיכו לקרוא, המשיכו לחקור!

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