İçindekilerGirişİndex
YukarıİlkÖnceki YokSonrakiSon
Geriİleri
Yazdır

Multi-Threaded Programming

Multi-Threaded Programming'e Kısa Bir Giriş

Çok Kanallı Programlama (Multi-Threaded Programming), bir programda aynı anda birden fazla işin yapılabilmesidir. Yani bir kod parçası bir işlemi gerçekleştirirken aynı anda ona paralelel olarak bir başka kod parçasının çalışması demektir. Bir birine paralel çalışan çalışanlardan her birine kanal (thread).

Java çok kanallı porgramlamayı temelden desteklemektedir. Yani çok kanallılık dile bir takım kütüphanelerle eklenmemiştir. Aslında her Java programı bir kanalda (thread'te) çalışır. Örneğin application'ların main method'unun çalıştırılmasıyla adı 'main' olan bir ana thread çalıştırılır. Ancak tek bir kanal olunca programcı yazdığı kodun bir thread'in içerisinde çalıştığını farketmez. Şu anda çalışan thread'in adını ekrana basan bir uygulama yazalım :

CurrentThreadTest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 package com.godoro.samples.lang;
  2 public class CurrentThreadTest {
  3   public static void main(String[] args)
  4   {
  5       String name=Thread.currentThread().getName();
  6       System.out.println("Name of the Current Thread : "+name);
  7   }
  8     
  9 }

Aslında bir exception fırladığında verilen mesaj'da 'Exception in thread "main"' ("main thread'de istisna!") şeklinde bir ifade bulunmaktadır. Buradan da her uygulamanın bir thread içerisinde çalıştırıldığı anlaşılabilir.

ExceptionInMainThreadTest.javaİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 package com.godoro.samples.lang;
  2 public class ExceptionInMainThreadTest {
  3   public static void main(String[] args)
  4   {
  5       int i=1/0;
  6   }
  7     
  8 }

Thread ve Runnable

Multi-threaded programlama'da Thread class'ı ve Runnable interface'i kullanılır. Runnable' interface'i sadece run() şeklinde bir method'dan oluşur.

void run();

Herhangi bir class Runnable'ı implement eder ve run() diye bir method yazarsa ayrı bir thread'de çalıştırılma olanağına sahip olabilir. Thread class'ı işte bu Runnable interface'ini implement eden class'ın run method'unu asıl thread'e paralel olarak çalıştırır. Ancak burada run() methodu doğrudan çağrılmaz. Onun yerine Thread class'ının start() methodu çağrılır. Thread class'ı uygun olduğu zaman run method'unu kendisi çağırır.

Örnek vermek gerekirse bir class Runnable'ı implement eder :

class MyClass implements Runnable{
	public void run(){
		/*
			 Any Piece of Code
			....
		*/	
	}
}

sonra herhangi bir method'un içerisinde :

    MyClass mc=new MyClass();
    Thread thread=new Thread(mc);
    thread.start();  

şeklinde bir kod yazılır.

Multi-Threaded Programming'i Java'da gerçekleştirmek çok kolaydır ama anlamak o kadar kolay olmayabilir. Zorluk kodlamakta değil, farklı bir düşünme mantığı gerektirdiği için çok kanallı programlamadan neyi nerede ne zaman yapacağına karar vermektedir.

Thread Class'ın Deprecated (Eskimiş) Method'ları

Thread class'ına ait, aralarında stop() ve destroy()'un da bulunduğu bir çok method deprecated olmuştur. Java dokumantasyonlarında bunların yerine neler kullanılması gerektiği detaylı bir şekilde bildirilmiştir. Özetle yapılması gerekn thread'i stop()'la durdurmak veya destroy()'la yoketmek yerine run() methodunda işlem yapılmamasını sağlamak ve Thread instace'ını null'a atamaktır.

Bütün eskimiş (deprecated) methodlarda olduğu gibi Thread class'ının eskimiş methodları istenirse kullanılabilir. ANcak bunun bazı durumlarda sorun yaratabileceği akıldan çıkarılmamalıdır.

Concurrent (Eşakışlı) Programlama

Multi-threaded programalama, bir işi yaparken o işten bağımsız başka işler yapmak için yeterli bir altyapı oluşturmaktadır. Ancak, birbirine paralel çalışan, ama aynı verilerle, birlikte, birbirleriyle sürekli iletişim içinde bulunan işler için programcının oldukça karmaşık bir yapı kurması gerekmektedir. Java'ya 1.5'de dahil edilen Concurrent Programing (java.util.concurrent ve alt paketleri) kütüphanesi concurrent (eşakışlı) programama için bir altyapı, bir çerçeve oluşturmakta, programcının kullanabileceği bir çok yapı sunmaktadır. Basit threading işlemleri için bu kütüphaneyi kullanmak (öğrenmek ve uygulamak) zahmetli olabilir. Ama karmaşık işlemler yapmak için bu paketin kullanılması oldukça faydalı olabilir..

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖnceki YokSonrakiSon
Geriİleri
Yazdır