השיטה join של תהליך Java ניתן להשתמש בה כדי להשהות את ביצוע התהליך הנוכחי עד שהתהליך המסוים מת. יש שלוש פונקציות join המועמדות.
join של תהליך Java
public final void join(): שיטת join זו של תהליך Java מעבירה את התהליך הנוכחי להמתנה עד שהתהליך עליו נקרא מת. אם התהליך מופסק, היא זורקת InterruptedException. public final synchronized void join(long millis): שיטת join זו של תהליך Java משמשת להמתין שהתהליך עליו נקרא יהיה מת או להמתין עבור מספר המילישניות שצוין. מאחר שביצוע התהליך תלוי במימוש המערכת הפעלה, היא אינה מבטיחה שהתהליך הנוכחי ימתין רק לזמן הנתון. public final synchronized void join(long millis, int nanos): שיטת join זו של תהליך Java משמשת להמתין שהתהליך ימות לפי מילישניות נתונות פלוס ננושניות. הנה דוגמה פשוטה המראה את שימוש שיטות join של Thread. מטרת התוכנית היא לוודא שה-main הוא התהליך האחרון שיסיים והתהליך השלישי יתחיל רק כאשר הראשון ימות.
package com.journaldev.threads;
public class ThreadJoinExample {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
Thread t3 = new Thread(new MyRunnable(), "t3");
t1.start();
//התחל שני תהליך לאחר המתנה של 2 שניות או אם הוא מת
try {
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
//התחל תהליך שלישי רק כאשר התהליך הראשון מת
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t3.start();
//תן לכל התהליכים לסיים את הביצוע לפני שתסיים את התהליך הראשי
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
//TODO בלוק לתפיסת חריגה שנוצרה אוטומטית
e.printStackTrace();
}
System.out.println("All threads are dead, exiting main thread");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Thread started:::"+Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ended:::"+Thread.currentThread().getName());
}
}
פלט של התוכנית למעלה הוא:
Thread started:::t1
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread
זו כל הסיכום המהיר על דוגמת השימוש ב-\java\ לדוגמה על תהליך.
Source:
https://www.digitalocean.com/community/tutorials/java-thread-join-example