Veysel Uğur KIZMAZ

Java ile Multithreading İşlemleri

26.03.2012Okunma Sayısı: 8506Kategori: Java

 Önceki makalemizde Thread kavramının ne olduğunu ve bir thread oluşturma işlemini incelemiştik. Şimdi eş zamanlı çalışan birden fazla thread oluşturma işlemini inceleyelim.

 
Önceki örneğimizde tek thread oluştururken Thread sınıfını genişletmiştik. Şimdi ise java.lang.Runnable Interface'inin kalıtımını alarak işlem yapıyoruz. Bu yöntem, thread oluşturmak için alternatif bir yöntemdir. Sınıflararası kalıtım verilmesi gereken durumlarda, Java sınıfları tek bir sınıftan kalıtım alacağı için bazen Thread sınıfından kalıtım almak imkansız hale gelebilmektedir. Bu durumlarda Runnable interface'i kurtarıcı olarak imdadımıza yetişmektedir.
 
Örnek uygulamamızda Islem isminde bir sınıfımız olsun ve bu sınıfta sonsuz döngüde alt alta işlem adı ve kaçıncı kez döngüde döndüğü bilgileri gösterilsin.
 
Runnable Interface'inin run methodu asıl işlemimizi yapan methoddur.
Islem.java
publicclass Islem implements Runnable{
 
      privateintsayac = 0;
      privateintislemNo;
 
      public Islem(int islemNo){
            this.islemNo = islemNo;
      }
     
      @Override
      publicvoid run() {
            while(true){
                  System.out.println("Islem " + this.islemNo + " : " + this.sayac++);
            }
           
      }
 
}
 
Eş zamanlı 2 işlem çalıştıracağımız için islemNo değişkeni ile hangi işlemde hangi değerin çalıştığını takip edebiliriz.
 
Şimdi bu kodumuzu denemek için main methoduna gidelim.
 
      publicstaticvoid main(String[] args) throws Exception {
            Islem islem1 = new Islem(1);
           
            Islem islem2 = new Islem(2);
           
            Thread thread1 = new Thread(islem1);
            Thread thread2 = new Thread(islem2);
 
            thread1.start();
            thread2.start();
      }
 
Önceki uygulamamızda Hesap sınıfı Thread'den kalıtım aldığı için run (ya da start) diyerek hemen çalıştırdık. Fakat burada Islem sınıfımızdan oluşturacağımız değişkeni önce Thread olarak tanımlamamız gerekmektedir. Bunun için 2 tane Thread oluşturuyoruz.
 
Şimdi main methodunu çalıştıralım.
 
 
Kodumuz sonsuz döngüye girdiği için herhangi bir yerinde durdurup ekran çıktısı aldım. Gördüğünüz gibi Islem2 22167'deyken Islem1 25188. döngüde bulunmakta ve belli bir sistem ile çalışmaktadırlar.
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com

twitter: @vukizmaz