Public, Void, Main, Static Nedir?
Public, void, main, static nedir?
81,126 Okunma 3 Yorum 30/10/2008 14:38:26
Java’da Thread’ler object olarak bulunmaktadir. Iki farkli yontemle thread’ler uzerinde calisabiliriz.
Tüm bunlar icin thread’lerimizi java diline tanitirken, Java.Lang.Thread sinifini veya Java.Lang.Runnable interface’ini kullanmamiz gerekmektedir. Thread sinifimizin icerisinde bulunan Run() metodunu kendisinden override edilmistir fakat biz bunu kullanirken public bir sekilde yazmamiz gerekmektedir. Ayni zamanda void ile kullanildigindan dolayi baska hic bir argument almadan return type’ini kullanmamiz gerekmektedir. Hem thread’ler hem de islemciler bu uygulama tarafindan soyutlandirilmis yani abstract haline getirilmistir.
Thread, Java.lang.Thread sinifi tarafindan extend edilir ve yine bu sinifin Run() metodu ile thread’lerimizi olusturmus oldugumuz nesne’nin start metodunu cagirarak calistiririz.
Olusturmus oldugumuz thread nesnesini, Thread sinifi icerisindeki constructor’in runnable arayuzune direkt olarak uygulayarakta calistirabiliriz.
Thread’lerimizi calistirabilmemiz icin oncelikle olusturmus oldugumuz sinifi Thread sinifindan extend etmemiz gerekiyor. Olusturmus oldugumuz bu sinif icerisinde tanimlayacagimiz bir thread nesnesi ile birlikte thread sinifina ait start() metodunu kullaniriz. Burada dikkat edilmesi gereken oncelik; her bir start metodu bir tek thread icin calismaktadir. Aksi olabilecek bir durumda RuntimeException hatasi ile karsi kasiya kalirsiniz. Burada anlasilmasi gereken diger bir ayrinti ise; Ayni thread sinifi uzerinde birden fazla nesne olusturabiliriz bununla birlikte her bir nesnenin start() metodu kendisine ait olacaktir. Start() metodu ile birlikte artik, paralelde calismasini istediginiz kodlarini Run() metoduna yazabilirsiniz. Start() metodu calistiktan itibaren direk run() metodu icerisindeki kod bloklari aktif hale geliyor olacak. Her bir kanalin kendi icerisinde hangi sirayla calisacagini bilemeyiz. Burada onemli olan run() metodu icerisindeki verilen gorevlerin zaman icerisinde diger tum kanallarla birlikte calisabiliyor olmasidir.
Run() metodu ile birlikte aktif olan tum gorevlerin thread’ler uzerinde oncelikleri bulunmaktadir. Oncelik degerleri 1′den 10′a kadar verilebilecek bir degerdir. Oncelikleri tanimlayabilmek ve degerlerini okutabilmek icin kullanacagimiz metodlar;
public final int getPriority() ; Thread’in onceligini okur.
public final int setPriority(int newPriority); Thread’in calisma sirasindaki onceligini belirlemektedir.
Oncelikleri belirleyebilmemiz icin uc adet sabit degerimiz bulunmaktadir; Thread.MIN_PRIORITY = 1 , Thread.NORM_PRIORITY = 5 , Thread.MAX_PRIORITY = 10 gibi…
Thread Life Cycle State Diagram – Thread Yasam Dongusu ve Durum Diagrami; Java’da var olan thread durumlarini aciklayacak olursak;
New; Yaratmis oldugumuz thread’in hazir beklemesi durumudur.
Runnable; Yaratmis oldugumuz thread’in artik calisir duruma gelmesidir.
Blocked; Thread bloklanarak, monitor lock durumu icin bekletilmektedir. Blok tekrar acildiginda yeniden runnable durumuna gececektir.
Waiting; Bir thread’in suresiz olarak diger thread’lerin yapmis oldugu isleri tamamlayabilmesi icin o thread’in bekledigi durumdur.
Timed Waiting; Bir thread’in diger thread’in isini tamamlayabilmesi icin sadece belirli bir sure bekledigi durumdur.
Terminated; Thread’lerin tum islerinin tamamlandigi ve islemlerin sonlandigi durumdur.
Özetleyecek olursak; Bir thread icin yeni bir nesne olusturulduktan hemen sonra start() metodu ile runnable durumuna gecmektedir. Thread’lerin ne kadar sure calisacaklarini bilemedigimiz icin egerki, uzun sureli calisan bir thread varsa ve diger thread’lerde is eksikligi varsa bunu engelleyebilmek icin uzun sureli calisan thread’lere sleep() metodunu kullanabiliriz. Sleep() metodu icerisindeki milisaniye’lik verilen degere gore o thread durdurulacak ve diger thread’lerin calismasi devam edecektir. Running state’de olan yani halen calisiyor olan bir thread; wait(), sleep() ve join() metodlari ile blocked state veya waiting state asamalarina getirtilebilir. Bu asamalarda tek bir thread, Senkronize tanimlanmis bir kod blogu icerisine gonderilerek lock haliyle o kod bloguna baglanmis olur. Thread isini bitirdikten sonra, bekleyen ve siraya giren diger thread’lere sira gelir. Egerki, lock haline girmis bir thread’in yeniden runnable duruma gecebilmesi icin sleep veya wait durumlarindan cikmis olmasi gerekir. Thread islemlerini bitirdikten sonra artik terminated durumuna gecerek kendisini oldurur. Bu durumda thread, tekrardan start edilemez hale gelir.
start(); Thread tarafindan calistirilan bu method, thread’in islemleri gerceklestirmesi icin harekete gecmesini saglar. Bir nevi hazirlik asamasidir.
run(); Thread’in yapmasi gerektigi islemleri yerine getirebilecegi bir method’tur. Direkt olarak calismaz, ancak start() method’u tarafindan aktif bir sekilde cagirilir.
stop(); Thread’i tamamen oldurur yani durdurur. Sonrasinda yeniden calistrmak icin start method’u verilmelidir. Bunun icin destroy() method’uda kullanilabilir.
wait(); Thread’i bekleme modundadir. Yeniden uyarilana kadar yada bekleme suresi bitene kadar bekleyecektir.
notify(); Bekleme durumundaki Thread’i uyarir ve Thread artik hazirlik moduna gecer.
sleep(); Wait metodu seklinde calisacaktir, Fakat uyku modundaki thread Interrrupt() metodu ile uyandirilmaktadir.
interrupt(); sleep() yada wait() method’lari ile uyandirilmis yada beklemeye alinmis thread’leri uyandirmak, tekrar aktif hale getirmek icin kullanilir. Thread’in kesme durumunda olup olmadigini isInterrupted() method’u ile kontrol edebiliriz.
yield(); Bir thread’in calisma aninda diger thread’lerin calisma onceliklerini kontrol ederek kendisini anlik bir sekilde bekletip digerlerinin calismasina izin verecektir.
join(); Belirtilecek olan thread’in vermis oldugumuz zaman parametresi ile yada o thread’in olumune kadar beklemesini saglariz.
isAlive(); Calisan thread hala aktif mi degil mi kontrol eden bir method’tur. Thread’i pasif hale getirebilmek icin, sleep(long) method’unu kullaniriz. Aktif hale getirebilmesi icin uyarmamiz gerekmektedir bunun icinde, notify() method’u kullanilir.
Eger thread’lerinizden birisi veriyi okumaya calisiyor ve diger herhangi bir thread’iniz ayni veriyi guncellemeye calisiyorsa, malesef bu durum paylasilan bilgi icin tutarsiz bir durum sergileyecektir cunku read / write sorununu ortaya cikmis olacaktir. Bu sorunu Java’nin Synchronized anahtari ile giderebiliriz, bunun sayesinde artik verilere senkronizasyonla duzenli ve verimli bir sekilde erisim saglanabilecektir.
public synchronized void Method_Name() {kod blogu} seklinde kullanacagimiz methodlar sayesinde yazmis oldugumuz kod bloklarina ayni anda birden fazla thread’in girmesini engellemek icin gelistirilmis bir method’tur. Bu method olusturulurken synchronized anahtar kelimesi kullanilmistir. Senkronizasyon islemini sadece kod blogunda degilde sadece belirli kod satirinda kullanmak istiyorsak bu sefer de, o tanimlanacak kod blogu icin synchronized anahtar kelimesini kullaniriz. Bunun icin synchronized (variable){kod blogu} seklinde kullanabiliriz. Bu kod bloklarinin icerisinde sleep() metodunun kullanilmasinin bir anlami yoktur cunku sirada bekleyen diger thread, blok icerisinden cikamayan thread icin beklemeye devam edecektir.
Thread Monitor, JVM yani Java sanal makinesi icin kullanilan thread’lerin durumlarini gozleyebilmemiz icin gelistirilmistir. Monitor islemi, java’da var olan her bir nesne icin gecerlidir. Thread Monitor ile, senkronizasyona ugramis method’lara sahip nesneleri ozel erisimi zorlayarak cagiracaktir. Bir thread senkronizasyona ugramis bir method’a sahip nesneyi cagirdigi zaman, JVM o nesne icin monitor islemini gerceklestirecektir. Monitor bostaysa, sahibi cagirilan thread tarafindan atanmis olur. Bu da daha sonrasinda, methodlarin devamliligi ile ilgili cagrisina izin verecektir. Eger monitor baska bir thread’e ait ise, cagirilan thread, monitor kullanilabilir hale gelene kadar beklemeye devam edecektir. Ta ki, thread senkronizasyon method’undan cikana kadar. bu da, thread’in kendi senkronizasyon methodunu cagirmasiyla birlikte beklemede bulundugunun bir cagrisini yapmis anlamina gelmektedir.
Not; Bu calisma Suleyman Demirel Universitesi – Bilgisayar Muhendisligi Bolumu, Degerli Hocamiz Ali GUNES ‘in beraberinde islenen Paralel Programlama Dersi icin hazirlanmistir.
Kaynak
Public, void, main, static nedir?
81,126 Okunma 3 Yorum 30/10/2008 14:38:26
73,470 Okunma 3 Yorum 04/11/2009 11:21:08
62,635 Okunma 4 Yorum 09/03/2009 11:11:13
Byte, short, int, long, float, double, boolean, char, string
59,864 Okunma Henüz yorum yapılmamış 04/11/2009 13:11:31
Javada diziler nesnedirler, cdeki gibi hafızada yer kaplayan pointer değillerdir. Javada diziler, cye göre daha güvenilirdir. Dizilerin elemanlarına gelişigüzel değerler atayamazsınız. Java, dizi elemanlarını sırasıyla kontrol eder. Dolayısıyla arada değer atanmamış bir elemana rastlanırsa hata oluşur. Bu da cde çıkan hafıza bozulmalarını önler. Javada dizi kullanmak için ilk önce dizinin tipi verilir. Tip verilirken dizinin büyüklüğü belirtilmez
57,936 Okunma 2 Yorum 19/11/2007 15:13:25
57,479 Okunma 1 Yorum 25/10/2007 14:38:38
Değer alan ve geriye değer döndüren fonksiyonlar
55,825 Okunma Henüz yorum yapılmamış 01/04/2010 14:39:09
Public, private, protected
51,861 Okunma 12 Yorum 09/05/2018 18:06:34 09/05/2018 21:06:52
Javada İstisna Yakalama Mantığı
49,295 Okunma Henüz yorum yapılmamış 12/02/2010 12:59:07
Javada try-catch-finally ve throw, throws kullanımı detaylı anlatım
41,902 Okunma Henüz yorum yapılmamış 04/03/2010 09:34:25
Stringler bilinen = operatörleri ile karşılaştırılmazlar, ayrıca == ve != operatörleride stringler içindeki karakterleri karşılaştırmazlar
41,457 Okunma Henüz yorum yapılmamış 18/10/2007 12:43:49
Aritmetik operatorler 4 işlem ve mod, arttırma operatorleri, ilişkisel operatorler, mantıksal operatorler, kısa devre mantıksal operatorler
40,146 Okunma Henüz yorum yapılmamış 02/12/2009 13:58:19
40,104 Okunma 6 Yorum 15/01/2010 08:36:41 07/12/2013 21:52:44
39,648 Okunma Henüz yorum yapılmamış 15/01/2010 08:21:28
J2ee,j2se,j2me hakkında bilgi
36,684 Okunma 1 Yorum 21/10/2009 17:00:15 16/07/2014 17:00:35
Java, birbirinden farklı aygıtlarda çalışabilen, bu aygıtlar arasında iletişimi kolay hale getiren programlama dili ve platformudur. Java diliyle yazılmış programlar, Windows, UNIX, Mac işletim sistemi yüklü bilgisayarlarda hiç bir değişiklik yapmayı gerektirmeden çalışabilmektedirler
36,046 Okunma Henüz yorum yapılmamış 16/10/2007 13:23:36
Bu başlık altında javada temel değişkenler ve tip dönüşümleri tostring, parseint, equals, final terimi anlatacağım.
35,554 Okunma 1 Yorum 24/11/2008 15:01:37
Swing'in JTable nesnesi ve TableModel kullanımına ilişikin bir yazı
33,034 Okunma Henüz yorum yapılmamış 26/01/2009 22:19:34
Class ve fonksiyon nedir, program yazma standartları ve kuralları...
32,483 Okunma Henüz yorum yapılmamış 30/10/2008 14:39:19
Java da diziler nesnedir; içerisinde belirli sayıda eleman bulunur. Eğer bu sayı sıfır ise, dizi boş demektir. Dizinin içerisindeki elemanlara eksi olmayan bir tam sayı ile ifade edilen dizi erişim indisi ile erişilir. Bir dizide n tane eleman varsa dizinin uzunluğu da n kadardır; ilk elemanın indisi/konumu 0’dan başlar, son elemanı ise n-1’dir.
31,668 Okunma 1 Yorum 14/04/2008 11:01:20
29,565 Okunma 1 Yorum 15/01/2010 01:32:16 22/01/2016 01:33:10
28,846 Okunma Henüz yorum yapılmamış 30/12/2009 11:02:00
Java programlamada paket yapısı ve import
28,635 Okunma Henüz yorum yapılmamış 16/04/2009 10:59:26
Son yıllarda çoklu ortamda ilerleme kaydeden Java, Java3D ile yüksek performans isteyen üç boyutlu grafiklerde de 'Ben varım!' diyor.
27,736 Okunma Henüz yorum yapılmamış 26/01/2009 22:23:10
Mod Operatörü, Aritmetik Atama Operatörü, Arttırma Azaltma Operatörleri, Iliskisel Operatorler ve Kısa Devre Iliskisel Operatörler, Kısa devre iliskisel operatorler, ? Operatoru
26,928 Okunma Henüz yorum yapılmamış 04/12/2009 12:11:34
26,591 Okunma 1 Yorum 14/01/2010 10:26:28
Aynı paket içersindeki klas yapılarına kolay erişimi sağlayan bir uygulama
26,462 Okunma Henüz yorum yapılmamış 16/03/2009 12:32:04