Java programlama diline özgü yapılardan biri olan thread, birbirinden bağımsız çalışabilen komut setlerine verilen addır.Paralel birden çok akış olmasını sağlayan yapılardır.Bir programda aynı anda birden fazla thread kullanılabilir ve bu threadlerin birbirileriyle haberleşmesi ya da birbirini kontrol etmesi sağlanabilir.Processlere (Süreç) benzerler.

Gerçekte ise Java her bir threadin birbiriyle çalışmasını engellemeyecek şekilde, ihtiyaçları olan zamanı birbirilerine tanıyarak aynı CPU ünitesini ortaklaşa kullanabilmelerine olanak verir.Ortak kullanılan bi hafıza vardır.

İki şekilde kullanılır.Birincisi yazdığımız sınıfı java.lang.Thread sınıfından extends ederek türetebiliriz.İkincisi ise bazı durumlarda sınıfımızın başka bir sınıftan

türetilmesi zorunlu olabilir, bu gibi durumlarda Javada çoklu kalıtım olmadığı için java.lang.Runnable interfaceini implement ederek kullanırız.Üç önemli metodu vardır.

public void start():Threadi çalıştırmaya hazırlar.

public void run():Threadin yapacağı işleri yerine getirir.Doğrudan doğruya çağrılmaz.Start çağrılınca kendiliğinden aktif olur ve gerektikçe çağrılır.Runnable interfacesindede sadece run metodu vardır.Threadin runnable parametre alan bir constructorı (yapıcısı) vardır.Bu şekilde gerekli thread oluşturulur.

public final void stop():Çağrılırsa thread durur.

Priority (Öncelik):Threadlerin bir özelliği olan priority (öncelik) 1den 10a kadar olan sayıdır.10 en yüksek öncelik, 1 en düşük önceliktir.Çoğu Virtual Machine (Sanal Makine) öncelikli thread işini bitirmedikçe veya bloke olmadıkça daha az öncelikli bir threade şans vermiyor.

public final int getPriority():Threadin önceliğini geri çevirir.

public final int setPriority(int yeniÖncelik):Threadin çalışma önceliğini değiştirir.

Join():Metodu çalıştırılınca thread başka bir threadin çalışmasını bekler.

public final void join()

public final void join(long milisaniye)

Thread th1=new Thread();

Thread th2=new Thread();

th2 içinde th1.join() yazdığımızda th1 bitene kadar th2 threadi bekler.

Senkronizasyon:Threadler her zaman aynı veriler üzerinde işlem yapmaz bazen ortak veriler üzerinde işlem yapar.Bu tip durumlarda thread bir veri üzerinde çalışıyorken başka bir threadin bu veriyi değiştirmemesi son derece önemlidir.Bunu çözmek için synchronized kelimesi kullanılır.

Monitör Yaklaşımı:Bir kod parçasının diğer tüm threadlere kapatılmasıdır.Javada her nesneye ait monitör denilen bir anahtar bulunur.Synchronized ile bu anahtarı ele geçiririz.Bu anahtar kimde ise o nesne üzerindeki değiştirme hakkıda o threade aittir.Bu thread anahtarı serbest bırakıncaya kadar diğer threadler bekler.

Static methodlar synchronized olabilir.Bu durumda sınıf kilitlenir.

Bir thread bir noktada durup başka bir threadin ölümünü bekleyebilir.

synchronized type method(· · ·) {

· · ·

}

yukaridaki yazım ile aşağıdaki yazım aynı şeyi ifade ediyor

type method (· · ·){

synchronized( this ) {

· · ·

}

}