crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Multi-threading: Paralel Dünyaya Giriş
1. Thread Nedir? (İş Parçacığı Mantığı)
Bir program çalıştığında işletim sistemi ona bir Process (Süreç) ayırır. Her process içinde en az bir ana iş parçacığı (Main Thread) bulunur. Multi-threading ise bu ana hattın yanına yeni yollar açarak işlerin bölünmesini sağlar.
2. Thread Oluşturma Yöntemleri
A. Thread Sınıfını Miras Almak (Extending Thread)
Bu yöntemde bir sınıf oluşturup Thread sınıfından türetiriz ve run() metodunu ezeriz.
Java:
class Islem extends Thread {
public void run() {
System.out.println("Thread çalışıyor: " + Thread.currentThread().getName());
}
}
// Kullanımı:
Islem t1 = new Islem();
t1.start(); // Dikkat: run() değil, start() çağrılır!
B. Runnable Arayüzünü Uygulamak (Implementing Runnable)
Java'da bir sınıf sadece bir sınıfı miras alabildiği için (Multiple Inheritance yok), Runnable arayüzü daha esnek bir çözümdür. En çok tercih edilen yöntem budur.
Java:
class Gorev implements Runnable {
public void run() {
System.out.println("Runnable görev icra ediliyor.");
}
}
// Kullanımı:
Thread t2 = new Thread(new Gorev());
t2.start();
3. Thread Yaşam Döngüsü (Life Cycle)
Bir thread oluşturulduğu andan yok olana kadar belirli aşamalardan geçer:
New: Thread nesnesi oluşturuldu ama henüz start() denmedi.
Runnable: Çalışmaya hazır, CPU sırası bekliyor.
Running: Şu an işlemci tarafından yürütülüyor.
Blocked/Waiting: Bir kaynağın açılmasını veya başka bir thread'in bitmesini bekliyor.
Terminated: Görevini tamamladı ve sona erdi.
4. Temel Thread Metotları
| Metot | Açıklama |
|---|---|
| start() | Yeni bir iş parçacığı başlatır ve run() metodunu çağırır. |
| sleep(ms) | Thread'i belirli bir süre duraklatır (uyutur). |
| join() | Bir thread bitene kadar çağıran thread'i bekletir. |
| setPriority() | İşlemci önceliğini belirler (1-10 arası). |
5. Kritik Kavram: Race Condition (Yarış Durumu)
Birden fazla thread aynı anda aynı değişkeni değiştirmeye çalışırsa veri tutarsızlığı oluşur. Bunu engellemek için synchronized anahtar kelimesi kullanılır. Bu, o kod bloğuna aynı anda sadece bir thread'in girmesini sağlayan bir "kilit" mekanizmasıdır.
Sonuç
Multi-threading, uygulamanızı hızlandırabilir ancak karmaşıklığı da artırır. Yanlış yönetilen thread'ler "Deadlock" (Kilitlenme) gibi içinden çıkılmaz hatalara yol açabilir. Bu yüzden basit işler için Thread yerine modern Java'da (Java 5+) gelen ExecutorService ve Thread Pool yapılarını kullanmak daha güvenlidir.