הבדל מפתח – ניתן להרצה לעומת שרשור
תוכנית בביצוע ידועה כתהליך. ניתן לחלק את התהליך למספר תהליכי משנה. לדוגמה, Microsoft Word הוא תהליך. במקביל, הוא בודק את שגיאת הכתיב והדקדוק. זה תת-תהליך. תת-תהליכים אלו ידועים בתור פתילים. ריבוי שרשורים הוא תהליך של ביצוע שרשורים מרובים בו זמנית. ניתן לבנות יישומים עם שרשור באמצעות שפות תכנות שונות. Runnable ו-Thread משויכים לתכנות Java. ישנן שתי שיטות ב-Java ליצירת שרשור על ידי הטמעת ממשק הרצה או הרחבת המחלקה Thread.בעת הטמעת Runnable, שרשורים רבים יכולים לשתף את אותו אובייקט שרשור בעוד במחלקת Extending Thread, לכל שרשור יש אובייקט ייחודי המשויך אליו. זה ההבדל העיקרי בין Runnable ל-Thread.
מה זה ניתן להרצה?
שרשור עובר בכמה מדינות. ה"חדש" הוא תחילתו של מחזור חיי החוט. לאחר שהמתודה start() קוראת לשרשור חדש, היא הופכת לניתנת להרצה. אם מתזמן השרשור בוחר את השרשור, הוא עובר למצב פועל. השרשור ממתין למצב אם השרשור הזה ממתין לשרשור אחר שיבצע משימה. לאחר שהשרשור מסיים את העבודה, הוא עובר למצב סיום.
ניתן ליישם שרשור באמצעות ממשק Runnable. עיין בתוכנית שלהלן.
איור 01: תוכנית Java ליצירת שרשור באמצעות ממשק ההפעלה
לפי התוכנית לעיל, הכיתה Runnable Demo מיישמת את ממשק Runnable. שיטת run() נמצאת בתוך המחלקה המיישמת ממשק Runnable. זוהי נקודת הכניסה לשרשור. ההיגיון הוא בשיטת run(). בתוכנית הראשית נוצר שרשור על ידי הגדרת אובייקט שהופק ממחלקה Runnable Demo. זה t1. שיטת start() נקראת באמצעות t1.
עיין בתוכנית שלהלן.
איור 02: תוכנית Java ליצירת שרשור לביצוע לולאה, על ידי יישום ממשק ההפעלה
לפי הדוגמה לעיל, הכיתה Runnable Demo מיישמת ממשק Runnable. ההיגיון לביצוע באמצעות השרשור נכתב בשיטת run(). בתוכנית הראשית נוצר שרשור על ידי הגדרת אובייקט שהופק ממחלקה Runnable Demo.זה t1. לאחר מכן, שיטת start() נקראת באמצעות t1.
מה זה שרשור?
השיטה האחרת ליצירת שרשור היא על ידי הרחבת המחלקה Thread. זה מורכב משלושה שלבים. ראשית, להכריז על המחלקה כמרחיבה את מחלקת ה-Thread. לאחר מכן, יש לכתוב את שיטת run(). יש לו את רצף השלבים שהשרשור צריך לבצע. לבסוף, אובייקט ה-thread נוצר, ומתודה start() נקראת כדי ליזום את ביצוע ה-thread. עיין בתוכנית שלהלן.
איור 03: תוכנית Java שמרחיבה את שיעור ה-Thread
לפי התוכנית לעיל, מחלקת MyThread מרחיבה את שיעור ה-Thread. זה עוקף את שיטת הריצה. שיטת run() מכילה את ההיגיון שיבוצע על ידי השרשור. זוהי נקודת הכניסה לשרשור.לאחר מכן נוצר אובייקט החוט. זה חוט 1. השרשור מתחיל בשיטת start(). זה יבצע קריאה ל-run() שיטת.
תוכנית לדוגמה של שני שיעורים המרחיבים את שיעור ה-Thread היא כדלקמן.
איור 04: תוכנית Java עם שתי מחלקות שמרחיבות את מחלקת ה-Thread
לפי התוכנית לעיל, גם כיתה א' וגם ב' מרחיבות את שיעור ה-Thread. לשתי המחלקות יש יישום של שיטת run(). השרשור הראשי הוא המבצע את שיטת main(). לפני שהשרשור הראשי מת, הוא יוצר ומתחיל את thread1 ו-thread2. עד שהחוט הראשי הגיע לסוף השיטה הראשית, שלושה חוטים פועלים במקביל. אין סדר ספציפי שבו השרשורים נותנים פלט. ברגע שהשרשור מתחיל קשה להחליט באיזה סדר הם יבצעו.הם פועלים באופן עצמאי.
מה הם קווי הדמיון בין ניתנים להרצה ל-Thread?
שניהם משתמשים כדי ליצור שרשור ב-Java
מה ההבדל בין ריצה לשרשור?
Runnable vs Thread |
|
Runnable הוא ממשק ב-Java ליצירת שרשור המאפשר לשרשורים רבים לשתף את אותו אובייקט שרשור. | השרשור הוא מחלקה ב-Java ליצירת שרשור שבו לכל חוט יש אובייקט ייחודי המשויך אליו. |
זיכרון | |
באפשרות להרצה, שרשורים מרובים חולקים את אותו אובייקט, ולכן דורשים פחות זיכרון. | במחלקת Thread, כל שרשור יוצר אובייקט ייחודי, ולכן דורש יותר זיכרון. |
הרחבת יכולת | |
לאחר הטמעת ממשק ההפעלה, הוא יכול להרחיב מחלקה. | ירושות מרובות אינן נתמכות ב-Java. לאחר הרחבת מחלקה Thread, היא לא יכולה להרחיב אף מחלקה אחרת. |
תחזוקה של קוד | |
הממשק הניתן להרצה הופך את הקוד לתחזוקה יותר. | בשיעור Thread, התחזוקה גוזלת זמן. |
סיכום – ניתן להרצה לעומת שרשור
תהליך מחולק למספר תהליכי משנה לביצוע מספר משימות בו-זמנית. תת-תהליכים אלו ידועים בתור פתילים. יצירת שרשור יכול להיעשות על ידי הטמעת ממשק ההפעלה או על ידי הרחבת מחלקת השרשור. קל להרחיב את מחלקת Thread, אבל זה לא תרגול טוב יותר של תכנות מונחה עצמים.בעת הטמעת Runnable, שרשורים רבים יכולים לשתף את אותו אובייקט שרשור בעוד בהרחבת מחלקה של Thread לכל שרשור יש אובייקט ייחודי המשויך אליו. זה ההבדל בין Runnable ל-Thread. במחלקת Thread יצירת אובייקטים מרובים יכולה לצרוך יותר זיכרון.
הורד את ה-PDF של Runnable vs Thread
ניתן להוריד את גרסת ה-PDF של מאמר זה ולהשתמש בה למטרות לא מקוונות לפי הערת ציטוט. אנא הורד את גרסת ה-PDF כאן ההבדל בין ריצה ל-Thread