start ve join
- Java kursu
- İleri seviye
- Ders 57/82
- 5 dk
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
// 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
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
Thread t = new HelloThread();
t.start();
t.____();
System.out.println("Bitti");
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.