|
JAVA İçinde Thread Kullanımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
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 :)
Ertuğrul Kara
[email protected]
Mehmet Metin Altuntaş
[email protected]
Makale:
JAVA İçinde Thread Kullanımı J# ve Java dili Ertuğrul Kara
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|