Java
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.
Örnek çözümü göster
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");
}
}
Kendini test et
-
start/join kavramlarını eşleştir
- start()
- Yeni iş parçacığı başlatır
- join()
- Bitene kadar bekler
- run()
- Doğrudan çağrı yapar
- Thread.State
- Durum verir
-
join çağrısını tamamla
Thread t = new HelloThread();
t.start();
t.____();
System.out.println("Bitti");
Cevabı göster
Thread t = new HelloThread();
t.start();
t.join();
System.out.println("Bitti");
-
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
- Hata fırlatır
- Hiçbir şey olmaz
Cevabı göster
Çağıran akış içinde sıradan yöntem gibi çalışır — run() doğrudan çağrılırsa yeni iş parçacığı başlamaz; sıradan yöntem gibi çalışır.
Sıradaki ders: synchronized