Output: Hi
Hi
Hi
Hi
Hi
Hello
Hello
Hello
Hello
Hello
Gordugumuz gibi 5 kez Hi ve Hello yazdi. Simdi ise her bir yazmadan once biraz beklesin diye bi thread sleep koyalim. 500 verdim yani 500 ms.
Kodumuz bu sefer yukaridaki gibi. 500 ms arayla print ediyor. Burada belirtmek istedigimiz sey kodumuz yine ayni seyi yapiyor ancak Hi yazmasinin bitmesini bekliyor. Bitmeden Hello ya gecmiyor. Bizim istedigimiz ise ikisi ayni anda calisabilsin, birbirini bloklamasin.
O yuzden burada thread kullanacagiz. Her classimiz Thread classini extend ederse classlarimiz Thread haline gelmis olur. Eee Thread classlarinda mutlaka run() olmali ki islemimiz orada calissin. O yuzden show() metodunu run() haline getiriyoruz. ve main threadimiz obj1.start() dememiz lazim. start() cagirdigimiz anda gidip run() methodunu calistirir.
Output :
Hi
Hello
Hi
Hello
Hello
Hi
Hi
Hello
Hello
Hi
Gordugumuz gibi artik 2 thread birbirini beklemiyor ve ayni anda calisabiliyor. Hatta o kadar ayni ana denk gelmis ki ardarda 2 tane Hello goruyoruz. Ayni ana gelme durumlarinda schedular a gidilir ve schedular hangisi daha kisa ve kolaysa onu secer. Ancak burada 2 methodumuz da ayni islemi yaptigi icin random olarak Hello secilmis.
Interfacelerle Calismak
Javada asagidaki gibi bir kullanim yoktur.
class A extends B, C
Sadece bir tane extend edebiliriz.
O halde soyle bir sey yapmak yerine
class Ornek extends A, Thread { (hatali)
asagidaki gibi yapabiliriz.
class Ornek extends A implements Runnable {
Yani neymis : Thread olusturmanin 2 yontemi varmis.
1. extends Thread diyerek
2. implements Runnable diyerek
Hangisi isimizi gorurse onu kullanmaliyiz.
Ancak artik classlarimiz Thread tipinde olmadigi icin obj1.start() diyemeyiz. Hata verir. Runnable da o sekilde bir method yok.
O zaman Thread olusturmamiz lazim.
Thread t1 = new Thread(obj1);
t1.start();
iste bu calisir. O halde kodumuzu duzenleyip yeniden deneyelim.
Output:
Hi
Hello
Hello
Hi
Hello
Hi
Hi
Hello
Hello
Hi
Simdi de bu yazmis oldugumuz daha kisa ve daha efektif hale getirmeye calisalim.
Hi ve Hello adinda iki class yazdik ve ikisinin de yaptigi sey sadece Runnable i implement etmek. O halde bunlara gerek yok.Thread icinde de ayni islemi yapabiliriz.
Simdi de bunu lambda haline getirelim. Yani method isimlerine ve parantezlere gerek yok.
O durumda da soyle olur:
Son durumda ise kodumuz asagidaki gibi olur ve ayni islevi daha efektif olarak yapar.
Output:
Hi
Hello
Hello
Hi
Hi
Hello
Hi
Hello
Hi
Hello
Hiç yorum yok:
Yorum Gönder