طريقة الانضمام لموضوع الخيط في جافا يمكن استخدام الأسلوب join في جافا لإيقاف تنفيذ الخيط الحالي حتى يتم إنهاء الخيط المحدد. هناك ثلاث وظائف join المتكررة.
طريقة الانضمام لموضوع الخيط في جافا
public final void join():
تقوم هذه الطريقة في جافا بوضع الخيط الحالي في وضع الانتظار حتى يتم إنهاء الخيط الذي تم استدعاء الطريقة عليه. إذا تمت مقاطعة الخيط، يتم رمي استثناء InterruptedException.
public final synchronized void join(long millis):
تستخدم هذه الطريقة في جافا للانتظار حتى يتم إنهاء الخيط الذي تم استدعاء الطريقة عليه أو حتى ينتهي الوقت المحدد بالميلي ثانية. نظرًا لأن تنفيذ الخيط يعتمد على تنفيذ النظام الأساسي، فإنها لا تضمن أن ينتظر الخيط الحالي فقط للوقت المعطى.
public final synchronized void join(long millis, int nanos):
تستخدم هذه الطريقة في جافا للانتظار حتى يتم إنهاء الخيط لعدد محدد من الميلي ثوان بالإضافة إلى النانو ثوان. فيما يلي مثال بسيط يوضح استخدام طرق join للخيط. الهدف من البرنامج هو التأكد من أن الرئيسي هو آخر خيط ينتهي، ويبدأ الخيط الثالث فقط عندما يتم إنهاء الأول.
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