Hızlı Konu Açma

Hızlı Konu Açmak için tıklayınız.

Son Mesajlar

Konulardaki Son Mesajlar

Reklam

Forumda Reklam Vermek İçin Bize Ulaşın

JAVA İçinde Thread Kullanımı

YaSa22

Fahri Üye
Fahri Üye
Katılım
12 Temmuz 2014
Mesajlar
2,293
Tepkime puanı
2
Puanları
0
Konum
GTA
Thread yani iş parçacığı Windows uygulamalarının yaygınlaşmasıyla vazgeçilmez hale geldi. Üstelik eski tarz programlama da (VB60, TC, TPascal) kullanılamayan ve zamanla C++, VC++ gibi nesne yönelimli dillerin gelişmesiyle, kendini Windows uygulamalarında daha etkin biçimde sergileyen Thread ler C++ ile birlikte java içinde de popüler olmayı başardı. Popüler olmaktan da öte zamanla gereksinim halini aldı.

Yazdığınız herhangi bir java programının başlangıç yordamı public sınıfın main metodudur. Bu metod işlerken standart program için bir Thread oluşur ve program sonlandığında Thread’ da sonlanır. Ancak bununla birlikte bir sınıf içindeki diğer yordamlarında hem programın bir parçasıymışçasına hem de programdan bağımsız işlemci gücü kullanarak çalışması Thread sayesinde yapılabilir. Bu iş parçacıkları ana iş parçacığı içinden yönetilebilir.

Thread ler tam olarak iki şekilde yapılır. Bunlardan birisi karmaşık olan Runnable arayüzünü kullanmak diğeri ise Thread sınıfından kalıtım almak. Thread sınıfından kalıtım yapacak olursak karşımıza çıkacak olan dezavantaj şu dur; Java dili tek bir kalıtıma (Single inheritance) izin verdiğinden tasarımda sorunlar çıkabilir. Ancak Runanable arayüzü ile de sınıflar Thread haline dönüştürüldüğünde çok fazla kod yazmamız gerekebilir. Şimdilik biz Thread sınıfından kalıtım alarak iş parçası oluşturmayı deneyeceğiz.

class Islem extends Thread
{
private String isim=””;
private int donguSay=0;
public Islem(String isim, int donguSay)
{
this.donguSay=donguSay;
this.isim=isim;
}
public void run()
{
for (int i=0; i<donguSay; i++)
{
System.out.println(i +”.” + this.isim + “ yazdirildi”);
}
}
}

Yukarıdaki sınıfı inceleyecek olursak ilsem sınıfı Thread sınıfından türetilerek yapıcısında 2 tane parametre alması sağlanıyor. Daha sonra alınan parametreler, sınıfın local değişkenlerine atılıyor. Thread sınıfından türetilen bir sınıfın Thread olabilmesi için run() metodunu içermesi gerekir. Daha doğrusu Thread sınıfından türetilen sınıfın içine yazılan run() metodu Thread içinde yapılacak olan işlemleri içerir. Bizim sınıfımızda ki run metodu yapıcı ile gönderdiğimiz parametreler doğrultusunda ekrana bilgi vermektedir. Şimdi oluşturduğumuz bu Thread i uygulama içinden nasıl kullanacağımıza bakalım.

public class Uygulama
{
public static void main(String args[])
{
Islem i1 = new Islem("Ertugrul", 2); //Ertugrul ismi ile 2 kez
Islem r2 = new Islem("Mehmet Metin", 3); // Mehmet Metin ismi ile 3 kez
Islem r3 = new Islem("Sun McrSys", 3); // Sun McrSys ile 3 kez

i1.start();
i2.start();
i3.start();
}
}

Yukarıdaki sınıfı incelediğimizde yapıcısı ile parametre gönderilmiş 3 adet sınıf oluşturuluyor ve start komutu ile çalıştırılıyor. Biz start komutunu Islem sınıfının yapıcısına belirterek otomatik başlamasını sağlayabilirdik ama bu Thread in yönetimini elimizden kaçırmamıza neden olabilirdi
Şimdi Thread yönetimi için gerekli bazı standart metodları tanımlayalım…

Metod İşlevi
start()Bu metod Thread için çalıştırıldığında, Thread işlemeye başlar.
stop()Thread' i öldürür. Bu metod sonrasında Thread tekrar start ile çalışır hale getirilmelidir.
wait()Thread' i beklemeye alır. Metod uyarılana kadar yada belirtilen süre bitene kadar beklemede kalır.
notify()Bekleme durumundaki Thread' i uyandırır. Metod sonrasında Thread, haz durumuna geçer.
sleep()wait() gibidir. Thread' i uyku moduna alır. Ancak interrupt() metodu ile uyandırılabilir.
interrupt()sleep() yada wait() ile uyutulmuş bir Thread' i uyandırır.
yield()Çalıştırılıyorken anlık bir bekleme üreterek kendisi ile aynı işlem önceliğine sahip başka bir Thread' in çalışmasına imkan sağlar.
join() Genelde başka bir Thread içinde kullanılır. Belirtilen Thread' in belirtilen süre yada ölene kadar beklemesini sağlar.

Thread önceliklerini belirlemek;

Windows işletim sisteminde görev yöneticisinde işlemlere öncelik atamayı mutlaka yapmışsınızdır. Bu işlemlere öncelik atamanın arka planında neler olduğuna bir bakacak olursak eğer;

Thread.MIN_PRIORITY =1
Thread.NORM_PRIORITY =5
Thread.MAX_PRIORITY=10

Görüldüğü gibi Thread enum değerleri olmasına karşın öncelik atamasında standart 1-10 arasında tam sayı değerler kullanabilirsiniz. Yani;

i1.setPriority(Thread.MIN_PRIORITY); // i1.setPriority(1);
i2.setPriority(Thread.NORM_PRIORITY); // i2.setPriority(5);
i3.setPriority(Thread.MAX_PRIORITY); // i3.setPriority(10);

Yukarıdaki kullanımlar aynı kullanımlardır. Bunun dışında arada bir değer atamak istediğinizde tek yapmanız gereken i3.setPriority(7); şeklinde komutunuzu girmenizdir
 

Users Who Are Viewing This Konu (Users: 0, Guests: 1)

Üst