Creating Threads, Extending Thread Class

Kategori: Java , 19 Temmuz 2019 , JanFranco


Normal şartlar altında, yazdığımız programın akışı kodun başından sonuna doğrudur. Ancak çok uzun hesaplamalar, işlemlerimiz vs. var ise, baştan sona doğru çalıştırmak yerine daha etkili yöntemler kullanabiliriz: Parallel Computing. Bir programı seri halden paralel hale getirebiliriz. Bir yandan yazdığımız for döngüsü çalışırken bir yandan da başka bir döngü çalışabilir ve 2x zamanda işlem sonlanacak iken bu zamanı 1,5x, 1,25x gibi daha düşük zamanlara düşürebiliriz.
Bu yazımızda Thread kavramından ve Thread oluşturma yöntemlerinin birinden bahsedeceğim. Thread bir programdaki bağımsız çalışma yoludur, pathidir. Bir çok Thread program içinde eş zamanlı çalışabilir. Java'da her thread java.lang.Thread classı tarafından oluşturulur ve kontrol edilir. Dediğim gibi Java'da bir program bir çok thread oluşturabilir, bu threadler senkronize veya asenkronize bir biçimde çalışabilirler.
Şimdi Java'da nasıl Thread oluşturabilieceğimize bakalım. Bunun için 3 farklı yöntem var bu yazımızda bu yöntemlerden birini göstereceğim. Bir sonraki yazıda diğer yöntemleri de göstereceğim. Koda geçmeden önce Java bölümündeki Parallel Computing yazıları tamamen Java içindir. Yani amaç Parallel Computing mantığını anlatmak vs. değildir. Basit bir giriş yapıyorum ve Java'da eş zamanlılığı gösteriyorum. Ayrıntılı Parallel Computing yazılarını da ayrı olarak sitemiz üzerinden yayınlayacağım.
Şimdi ilk olarak Printer adında bir sınıf açalım:


public class Printer extends Thread{

	private String name;

	public Printer(String name) {
		this.name = name;
	}

	@Override
	public void run() {
		System.out.println(name + " starts working...");
		
		for(int i=1; i<=10; i++){
			
			System.out.println(name + " is working " + i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				System.out.println("Thread.Sleep interrupped...");
			}
			
		}
	
	}
		
}
Bu açtığımız sınıf Thread sınıfını miras almaktadır. Miras aldığımız sınıftan run methodunu override ettik. Daha önce görmediğimiz Thread.sleep methodu burada programı 1 saniyeliğine durdurmak için kullanılmıştır. Böylelikle sonucu daha iyi görebileceğiz. Şimdi de Main_class'ta Printer sınıfından objeler üretip çalıştıralım:

public class Main_class {

	public static void main(String[] args){
		
		Printer printer1 = new Printer("printer1");
		Printer printer2 = new Printer("printer2");
		
		printer1.start();
		printer2.start();
		
		System.out.println("Main Thread 1 is Working");
		
	}
	
}
Printer sınıfından printer1 ve printer2 objelerini ürettik ve start methodunu kullanarak (Thread sınıfını miras almıştık) threadleri çalıştırıyoruz. Sonucu görelim:

Main Thread 1 is Working
printer1 starts working...
printer1 is working 1
printer2 starts working...
printer2 is working 1
printer1 is working 2
printer2 is working 2
printer2 is working 3
printer1 is working 3
printer1 is working 4
printer2 is working 4
printer1 is working 5
printer2 is working 5
printer1 is working 6
printer2 is working 6
printer1 is working 7
printer2 is working 7
printer2 is working 8
printer1 is working 8
printer2 is working 9
printer1 is working 9
printer2 is working 10
printer1 is working 10
Gördüğünüz gibi eş zamanlı bir şekilde iki thread de çalışmış oldu. Thread.sleep methodunu kaldırdığımızda:

Main Thread 1 is Working
printer1 starts working...
printer1 is working 1
printer1 is working 2
printer1 is working 3
printer1 is working 4
printer1 is working 5
printer1 is working 6
printer1 is working 7
printer2 starts working...
printer2 is working 1
printer2 is working 2
printer2 is working 3
printer2 is working 4
printer2 is working 5
printer2 is working 6
printer2 is working 7
printer2 is working 8
printer2 is working 9
printer2 is working 10
printer1 is working 8
printer1 is working 9
printer1 is working 10
Burada çok zorlayıcı bir işlem yapmadığımızdan sonucu daha iyi görebilmek için sleep methodunu kullanmak yararlı olabilir. Bir sonraki yazıda Thread oluşturmanın bir başka yöntemini göstereceğim.


Sonraki Yazı: Creating Threads, Implementing Runnable Interface
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın