CodeBlanks Logo Icon CodeBlanks

start ve join

start ve join ile iş parçacığı yönetimini öğrenirsin.

start ve join

start() yeni bir iş parçacığını başlatır; join() ise o iş parçacığı bitene kadar çağıranı bekletir. Bu, sıralı çıktı için önemlidir.

Thread t = new HelloThread();
t.start();
t.join();
System.out.println("Bitti");

join() çağrılmazsa, ana akış iş parçacığı bittmeden devam edebilir ve sıra karışabilir. join belirli bir süre de alabilir: join(1000) en fazla bir saniye bekler. Bu denetim, belirli çıktı sıralarını güvenceye alır.

join ve InterruptedException

join() çağrısı InterruptedException fırlatabilir. Bekleyen bir iş parçacığı, başka birisi tarafından interrupt() ile bölünebilir.

try {
    t.join();
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

Yakaladığında interrupt() durumunu yeniden ayarlamak iyi bir uygulamadır. Bu, üst katmanın bölme isteğini fark etmesini sağlar. İş parçacıklarını nazikçe durdurmanın standart yolu budur.

Uygulama start ve join ile sıralı çıktı

Bir Worker sınıfı Thread'i kalıtım alsın; @Override run() gövdesi System.out.println("Worker done") çağrısı yapsın. Bir JoinDemo sınıfında main metodu yaz; Worker örneği oluştur, start() çağır, join() ile bekle (try/catch içine al) ve son olarak System.out.println("Main done") yazdır.

Başlangıç kodu

Main.java
// Worker sınıfını Thread kalıtımıyla tanımla

// run() içinde println çağır

// JoinDemo sınıfında main yaz; start ve join çağır, sonra Main done yazdır

Örnek çözüm

Main.java
class Worker extends Thread {
    @Override
    public void run() {
        System.out.println("Worker done");
    }
}

class JoinDemo {
    public static void main(String[] args) throws InterruptedException {
        Worker w = new Worker();
        w.start();
        w.join();
        System.out.println("Main done");
    }
}

Beklenen çıktı

Worker done
Main done

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 start/join kavramlarını eşleştir

Kavram Anlamı
start() Yeni iş parçacığı başlatır
join() Bitene kadar bekler
run() Doğrudan çağrı yapar
Thread.State Durum verir

2 join çağrısını tamamla

Soru
Thread t = new HelloThread();
t.start();
t.____();
System.out.println("Bitti");
Cevap
Thread t = new HelloThread();
t.start();
t.join();
System.out.println("Bitti");

Açıklama: join() iş parçacığı bitene kadar bekler.

3 Bir Thread'in run() yöntemini doğrudan çağırırsan ne olur?

  • Yeni iş parçacığı başlar
  • Çağıran akış içinde sıradan yöntem gibi çalışır Doğru cevap
  • Hata fırlatır
  • Hiçbir şey olmaz

Açıklama: run() doğrudan çağrılırsa yeni iş parçacığı başlamaz; sıradan yöntem gibi çalışır.

İleri seviye bölümündeki tüm dersler