Java Thread İşlemleri

Java da Ne zamandır unuttuğum konuları iyi bir tekrar edip bir blog yazısı yazmak vardı. Kısmet bugüneymiş.

Thread Nedir ?

  • Kelime anlamı olarak İş parçacığı gelmektedir.
  • Bir programın paralel olarak çalışan ve bir birine bağımlı ya da bağımsız işlemler yapan alt parçacıklarına verilen isimdir.

Thread Oluşturma Şekilleri :

  1. Çekirdek Uzayında Gerçeklenen Threadler : Thread tablosu kernel’de (işletim sisteminde) yer alır. Hangi thread’in çalışacağına kernel (çekirdek) karar verir. Yeni thread oluşturmak için kernel’da sistem çağrısı yürütülür.
  2. Kullanıcı Uzayında Gerçeklenen Threadler : Kernel, threadlerden haberdar değildir, bu nedenle threadleri desteklemeyen işletim sistemlerinde bile kullanıabilir. Her process’in (programın) ayrı thread tabloları bulunmaktadır. Bu sayede her processte farklı iş sıralama algoritmaları kullanılabilmektedir.
  3. Hibrit Threadler : Çekirdek ve kullanıcı düzeyinde threadler vardır, ancak kernel sadece kernel düzeyindeki threadlerden haberdardır. Bir kernel düzeyi thread üzerinde birden fazla kullanıcı düzeyi thread sıra ile çalışır.

Thread Türleri :

  1. Single Threading :Aynı anda tek thread çalıştırma işlemidir. Threading’i desteklemeyen işlemciler tarafından kullanılan yöntemdir. Uygulama multithread olarak hazırlansa dahi ana thread üzerinden işlemleri çalıştıracaktır. Günümüzde bu teknolojide işlemciler kalmamıştır. (MS-DOS)
  2. Multi Threading : Aynı anda birden fazla thread çalıştırma işlemidir. Az önce verdiğimiz örnekteki gibi ve çok daha gelişmiş yapılar bu işlem için örnek verilebilir. Günümüz işlemci ve yazılım mimarisi bu sistem üzerine kurulmuştur. (Solaris, UNIX, Windows)

Threadlerin Yaşam Döngüsü :

indir (1)

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.

Java da Thread İşlemleri

2 şekilde thread’leri çağırabilir. Kalıtım ile (extends) thread kütüphanesini çağırarak . 2. şekil olarak’ta throws InterruptedException ile main class’ında çağırabiliriz.

publicclass Ornek extends Thread{

private int deger= 0;

public void run(){

while(true){

System.out.println(this.deger++);}}}

public static void main (String [] args) throws InterruptedException {

Ornek hesap1 = new Ornek();

hesap1.start();}

Thread ile ilgili 0-10’a kadar 1 saniye aralıkllarla yazdıran sonsuz devam eden uygulama

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package threaduyg;

/**
*
* @author um
*/
public class Threaduyg extends Thread{

public void run() {

while(true) {
for (int j = 0; j < 10; j++) {
System.out.println(j);

try {
sleep(1000); // Örneğin her seferinde 1 saniye beklenecek
}
catch(InterruptedException e) {
// Bekleme esnasında kanala işletimi kesme sinyali gönderilirse
// yapılacak işler burada ele alınacak
}}
}}
public static void main(String[] args) {
Threaduyg a=new Threaduyg();
a.start();
}

}

 

Metodlar : Anlamları 

  1. isAlive() Metodu : Bir kanalın ayakta olup olmadığını öğrenmek için kullanırız
  2. sleep(long/bu kısma değer girilicek) : Kanal’ın uyumasını sağlayabilirz. Thread.sleep(long) ile de kanal içerisinde uyuma sağlarız.
  3. synchronized: Kanala yapılan metod çağrılarında sıralı işlemler için kullanılır.
  4. wait(): kanalı beklemeye alırız.
  5. notify(): Kanalı uyandırırız.
  6. setPriority(int): Kanalların çalışma anlarında öncelik için kullanılır.
  7. yield(): Boşta duran kanalların işgalini önlemek için kullanırız. Bekleme sırasında yüksek veya eşit önceliğe sahip kanalların çalışmasına izin verir.
  8. join(): kanalın belirli süre veya ölene kadar beklemesini sağlarız.
  9. interrupt():  wait veya sleep halinde olabilen kanalın uyandırılmasını sağlamaktadır. Kanalın kesme durumunda olup olmadığına da isInterrupted() ile bakılır.
  10. stop() ya da destroy(): Kanalı öldürmek için kullanırız.

 

Kaynakça : http://www.ugurkizmaz.com/YazilimMakale-1628-Java-Threading-Nedir.aspx

http://www.godoro.com/Divisions/Ehil/Mecmua/Magazines/Articles/txt/html/article_MultiThreadingJava.html

Post Author: umiitkose

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">