הבדל בין שינה לחכות בג'אווה

תוכן עניינים:

הבדל בין שינה לחכות בג'אווה
הבדל בין שינה לחכות בג'אווה

וִידֵאוֹ: הבדל בין שינה לחכות בג'אווה

וִידֵאוֹ: הבדל בין שינה לחכות בג'אווה
וִידֵאוֹ: עשר הנשים הכי גבוהות בעולם┃טופטן 2024, נוֹבֶמבֶּר
Anonim

הבדל מפתח - שינה לעומת המתנה ב-Java

Sleep and wait הן שתי שיטות המשמשות לריבוי שרשורים ב-Java. שיטת השינה שייכת למחלקת Thread בעוד ששיטת המתנה היא ממחלקת Object. ההבדל העיקרי בין שינה להמתנה ב-Java הוא שהשינה משמשת להשהיית ביצוע השרשור הנוכחי למשך המספר שצוין של אלפיות השנייה בעוד ששיטת ההמתנה משמשת כדי לגרום לשרשור הנוכחי לחכות עד שרשור אחר יפעיל את ההודעה או שיטת notifyAll עבור האובייקט.

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

מה זה שינה ב-Java?

יש מספר תהליכים הפועלים במערכת הפעלה. תהליך הוא תוכנית בביצוע. לכל תהליך יכולים להיות שרשורים מרובים, וקיים החלפת הקשר בין השרשורים הללו. ב-Java, יש שתי דרכים ליצור שרשור. כלומר על ידי הרחבת מחלקת ה-thread או על ידי הטמעת ממשק Runnable. למחלקה Thread יש בנאים ושיטות ליצירה ולביצוע פעולות על שרשור. המחלקה Thread מרחיבה את מחלקת Object ומטמיעה ממשק Runnable. ממשק Runnable צריך להיות מיושם על ידי כל מחלקה שהמופעים שלה מיועדים לביצוע על ידי שרשור.כאשר השרשור מופעל, הקוד שאמור להפעיל נכתב בתוך שיטת ההפעלה. השרשור שאמור לרוץ נבחר על ידי מתזמן השרשור. רק שרשור אחד פועל בתהליך יחיד.

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

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

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

איור 01: תוכנית Java עם שיטת שינה

לפי התוכנית לעיל, שיטת הריצה מכילה קוד שיש לבצע. בתוכנית הראשית, נוצרים שני אובייקטים של ExampleThread1, ושיטות ההתחלה מופעלות עליהם. זה יאפשר להריץ את הקוד בתוך שיטת הריצה. רק שרשור אחד מופעל בכל פעם. עם החוט.שינה (1000); יאפשר לשרשור הראשון לסיים את הביצוע למשך 1000 מילישניות. כאשר שרשור ישן, מתזמן השרשור קולט את השרשור השני.

מה זה המתנה ב-Java?

שרשורים מרובים עשויים לגשת למשאב משותף. זה יכול לגרום ליצירת פלט שגוי. ניתן להשתמש בסנכרון שרשור כדי ליצור שרשור אחד בלבד כדי לגשת למשאב המשותף. נניח מצב כדלקמן. אם יש שני שרשורים כמו t1 ו-t2, t1 תתחיל לשמור ערכים בקובץ טקסט בשם Text1.txt. ערכים אלה ישמשו לחישוב אחר כאשר t1 יחזור. אם t2 מתחיל לפני t1 חוזר, t2 יכול לשנות את הערכים שנשמרו על ידי t1. זה יכול לגרום ל-t1 לספק פלט שגוי. בעזרת סנכרון, כאשר t1 מתחיל להשתמש בקובץ Text1.txt, ניתן לנעול את הקובץ הזה, כך שהוא נגיש רק על ידי t1. ה-t2 לא יכול לשנות אותו עד ש-t1 ישחרר את המנעול כדי לגשת לקובץ הטקסט הזה. כאשר המשימה תושלם ה-t1 יכול לשחרר את המנעול. המנעול ידוע גם בשם המוניטור.

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

ההבדל בין שינה להמתנה ב-Java_Figure 02
ההבדל בין שינה להמתנה ב-Java_Figure 02

איור 02: כיתת מחשבון

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

איור 03: שיטה ראשית

מחלקת המחשבון מרחיבה את השרשור. הבלוק המסונכרן נמצא בתוך שיטת הריצה. שיטת for loop and notify נמצאת בתוך הבלוק המסונכרן. בתוך השיטה הראשית, נוצר מופע של שרשור ושיטת ההתחלה נקראת באותו מופע. השיטה הראשית תחכה עד שהשרשור ייתן הודעה. בעת הפעלת התוכנית, השיטה הראשית ממתינה עד לביצוע כל שיטת הריצה וממתינה לשיטת ההודעה. ברגע שנקראת שיטת ההודעה, השיטה הראשית מפסיקה להמתין ומתחילה להפעיל את שאר הקוד. ראשי ממתין עד להשלמת השרשור של המחשבון. לבסוף, תוצאת הסכום מודפסת.

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

Calculator t1=מחשבון חדש ();

t1. התחל ();

System.out.println (t1.sum);

מהו הדמיון בין שינה לחכות ב-Java?

שני השינה וההמתנה הן שיטות שניתן להשתמש בהן בעת יישום ריבוי הליכי שרשור ב-Java

מה ההבדל בין שינה לחכות ב-Java?

שינה לעומת המתנה ב-Java

שיטת השינה גורמת לשרשור הנוכחי להשעות את הביצוע למשך המספר שצוין של אלפיות השנייה, בכפוף לדיוק ולדיוק של טיימרים ומתזמנים של המערכת. שיטת ההמתנה גורמת לשרשור הנוכחי להמתין עד שרשור אחר יפעיל את שיטת notify או notifyAll עבור האובייקט.
שיוך עם מנעול
שיטת השינה אינה משחררת את הנעילה של אובייקט במהלך הסנכרון. שיטת ההמתנה משחררת את הנעילה במהלך הסנכרון.
שיטת ביצוע
שיטת השינה מבוצעת בשרשור הנוכחי. שיטת ההמתנה נקראת על האובייקט.
כיתה קשורה
השינה היא שיטה של שיעורי Thread. המתנה היא שיטה של מחלקת Object.
השלמה
תהליך השינה הושלם לאחר תום פרק הזמן שצוין. שיטת ההמתנה מופסקת על ידי קריאה לשיטות notify or notifyAll.

סיכום - שינה לעומת המתנה ב-Java

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

מוּמלָץ: