מחזור חיי התהליך ב-Java – מצבי התהליך ב-Java

הבנת מחזור חיי התהליך ב-Java ומצבי ה־Thread הם חשובים מאוד כאשר אתה עובד עם Threads ומתכנת עבור סביבה מרובת תהליכים. מהשיעור האחרון שלנו, אנו יכולים ליצור מחלקת java thread על ידי הממשק Runnable או על ידי הרחבת המחלקה Thread, אך כדי להתחיל תהליך ג'אווה, עלינו תחילה ליצור את אובייקט ה-Thread ולקרוא לפונקציית ה־start() שלו כדי לבצע את פונקציית ה־run() כתהליך.

מחזור חיי התהליך ב-Java

התרשים למטה מראה את מצבי התהליך השונים במחזור חיי התהליך ב-Java. אנו יכולים ליצור תהליך ב-Java ולהתחיל אותו, אך איך המצבים של התהליך משתנים מ־Runnable ל־Running ל־Blocked תלוי ביישום מתזמן של מערכת ההפעלה ובפועל אין ל-Java שליטה מלאה בזה.

חדש

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

Runnable

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

Running

כאשר התהליך מבוצע, מצבו משתנה ל-Running. מתזמן התהליכים בוחר אחד מהתהליכים מבריכת התהליכים הרצים ומשנה את מצבו ל-Running. לאחר מכן, המעבד מתחיל לבצע את התהליך הזה. תהליך יכול לשנות את מצבו ל-Runnable, Dead או Blocked ממצב הרצתי תלוי בגיזור זמן, השלמת התהליך של השיטה run() או המתנה למשאבים מסוימים.

Blocked/Waiting

A thread can be waiting for other thread to finish using thread join or it can be waiting for some resources to available. For example producer consumer problem or waiter notifier implementation or IO resources, then it’s state is changed to Waiting. Once the thread wait state is over, it’s state is changed to Runnable and it’s moved back to runnable thread pool.

Dead

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

Source:
https://www.digitalocean.com/community/tutorials/thread-life-cycle-in-java-thread-states-in-java