Java'da Thread konusuna girmeden önce Thread Nedir? konusuna göz atmamız gerekecektir.
Basitçe Thread, bir programın paralel olarak çalışan ve biribirine bağlımlı ya da bağımsız işlemler yapan alt parçacıklarına verilen isimdir. Yani bir program içinde birçok thread oluşturulabilmektedir. Örneğin eş zamanlı olarak bir thread'de 1'den 1000000'a kadar sayıları saydırırken, bir yandan 1000000'dan 1'e sayıları büyükten küçüğe saydırabilmekteyiz. Hatayımızda threadler olmasaydı ikincisayma işleminin başlaması için ilkinin bitmesi beklenmek zorundaydı.
Thread Oluşturma Şekilleri :
1. Çekirdek Uzayında Gerçeklenen Threadler : Thread tablosu kernel’de (işletim sisteminde) yer alır. Hangi thread’in çalışacağına kernel (çekirdek) karar verir. Yeni thread oluşturmak için kernel’da sistem çağrısı yürütülür.
2. Kullanıcı Uzayında Gerçeklenen Threadler : Kernel, threadlerden haberdar değildir, bu nedenle threadleri desteklemeyen işletim sistemlerinde bile kullanıabilir. Her process’in (programın) ayrı thread tabloları bulunmaktadır. Bu sayede her processte farklı iş sıralama algoritmaları kullanılabilmektedir.
3. Hibrit Threadler : Çekirdek ve kullanıcı düzeyinde threadler vardır, ancak kernel sadece kernel düzeyindeki threadlerden haberdardır. Bir kernel düzeyi thread üzerinde birden fazla kullanıcı düzeyi thread sıra ile çalışır.
Thread Türleri :
1. Single Threading : Aynı anda tek thread çalıştırma işlemidir. Threading'i desteklemeyen işlemciler tarafından kullanılan yöntemdir. Uygulama multithread olarak hazırlansa dahi ana thread üzerinden işlemleri çalıştıracaktır. Günümüzde bu teknolojide işlemciler kalmamıştır. (MS-DOS)
2. Multi Threading : Aynı anda birden fazla thread çalıştırma işlemidir. Az önce verdiğimiz örnekteki gibi ve çok daha gelişmiş yapılar bu işlem için örnek verilebilir. Günümüz işlemci ve yazılım mimarisi bu sistem üzerine kurulmuştur. (Solaris, UNIX, Windows)
Mutex-Exclusion
Mutex-Exclution kavramı, birden fazla threadin eş zamanlı güvenli çalışmasını sağlamak anlamına gelmektedir. Birden fazla thread eş zamanlı olarak çalışırken çakışmalar gerçekleşebilmektedir. Bunu önleyebilmek için yazılım dilleri bazı kontrollerle bu çakşmayı önlemektedir.
Cross-Threading
Multi-Threading uygulamalarında threadlerin birbirleriyle haberleşmesini sağlayan yapıdır. Örneğin eş zamanlı aynı control üzerinde birden fazla thread işlem yapamazken bu yöntem sayesinde bu işlemi gerçekleştirebilmesi sağlanabilmektedir.
Bu kadar teorik açıklamadan sonra Thread uygulamalarımıza başlayalım.
İlk örneğimiz tek bir thread oluşturma ve kullanma işlemidir.
publicclass Hesap extends Thread{
privateintsayac = 0;
publicvoid run(){
while(true){
System.out.println(this.sayac++);
}
}
}
|
Hesap sınıfımız Thread sınıfından türetilmiştir. Bu işlem, thread olarak kullanılabileceğini belirtmektedir. Şimdi Hesap sınıfından bir nesne oluşturup projemizi çalıştıralım.
publicstaticvoid main(String[] args) throws InterruptedException {
Hesap hesap1 = new Hesap();
hesap1.start();
}
|
Kodumuz sonsuz döngüye girdiği için kodumuzun çalışmasını durdurduk ve durdurduğumuz noktada ekran görüntüsünü aldık.
Thread kavramını ve tek bir thread'in nasıl oluşturulup çalışacağını inceledik. Bir sonraki makalemizde multi-threading uygulamaların nasıl gerçekleştiğini inceleyelim.
Veysel Uğur KIZMAZ