Sobes.tech
Middle

Πώς λειτουργεί η μέθοδος Thread.join();

sobes.tech AI

Απάντηση από AI

Η μέθοδος Thread.join() κάνει το τρέχον εκτελούμενο νήμα να περιμένει μέχρι να ολοκληρωθεί το νήμα στο οποίο καλείται το join.

Καλέστε otherThread.join(), το τρέχον νήμα (π.χ. το νήμα main) μπλοκάρεται μέχρι το otherThread να ολοκληρώσει την εκτέλεσή του (η μέθοδος run() του επιστρέφει τον έλεγχο).

Μπορείτε να ορίσετε ένα χρονικό όριο σε χιλιοστά του δευτερολέπτου ή σε χιλιοστά και νανοδευτερόλεπτα:

  • otherThread.join(long millis): περιμένει το πολύ millis χιλιοστά του δευτερολέπτου.
  • otherThread.join(long millis, int nanos): περιμένει το πολύ millis χιλιοστά του δευτερολέπτου και nanos νανοδευτερόλεπτα.

Αν λήξει το καθορισμένο χρονικό όριο και το νήμα δεν έχει ολοκληρωθεί, το τρέχον νήμα ξεμπλοκάρεται και συνεχίζει την εκτέλεση.

Το Thread.join() μπορεί να ρίξει μια InterruptedException αν το τρέχον νήμα διακοπεί κατά τη διάρκεια της αναμονής. Σε αυτή την περίπτωση, η αναμονή διακόπτεται.

Παράδειγμα:

// Δημιουργία και εκκίνηση ενός νέου νήματος
Thread worker = new Thread(() -> {
    try {
        // Προσομοίωση εργασίας
        Thread.sleep(2000);
        System.out.println("Το νήμα worker ολοκληρώθηκε.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Το κύριο νήμα περιμένει να ολοκληρωθεί το worker
    worker.join();
    System.out.println("Το κύριο νήμα συνεχίζει μετά την ολοκλήρωση του worker.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Σημαντικό: Το join() συγχρονίζει την εκτέλεση ενός νήματος με την ολοκλήρωση ενός άλλου. Αυτό είναι χρήσιμο όταν θέλετε να διασφαλίσετε ότι μια συγκεκριμένη εργασία έχει ολοκληρωθεί πριν συνεχίσετε την εκτέλεση σε άλλο νήμα.