Java ile MultiThread uygulamada Thread önceliği

Java ile MultiThread uygulamada Thread önceliği

Herkese merhabalar, bu yazımızda sizlerle Java ile geliştirilen MultiThread uygulamalarda Thread önceliğinden bahsedeceğim. ThreadPriority ile thread önceliğini ayarlamış olacağız.

Hadi Başlayalım.

MultiThread uygulamalarda, yeni bir thread oluşturulduğunda, oluşturulan bu threada bir öncelik değeri verilir. Bu değer default olarak JVM(Java Virtual Machine) tarafından verilir. Aynı zamanda geliştiricide oluşturulacak olan bu thread için, geliştirme aşamasında 0 ile 10 arasında bir öncelik değeri atayabilir.

Aynı zamanda Javada 3 adet static olarak priority değeri tanımlanmıştır. Bunlar
  • public static int Thread.MIN_PRIORITY = 1 En düşük öncelik değeridir.
  • public static int Thread.NORM_PRIORITY = 5 Orta değerdir. Aynı zamanda Default olarak ayarlı olan değerdir.
  • public static int Thread.MAX_PRIORITY= 10 En yüksek öncelik değeridir.

Bir Thread için öncelik değeri nasıl ayarlanır

Bu işlemler için getPriority() ve setPriority() metodları bulunmaktadır. getPriority() metodu ile ilgili threadın priority değeri getirilir; setPriority(int) değeri ile ilgili metodun priority değeri değiştirilir. Bu threadın priority değeri en fazla 10 olabilir. Aksi takdirde IllegalArgumentException runtime hatası alınır.

Aşağıdaki örnekte iki adet sınıf tanımladık ve bu sınıfları Thread sınıfı haline getirdik (thread1 ve thread2). Ardından içlerine tanımlanan get ve set metodları ile kendi içlerinde priority değerleri ile ilgili işlem yapabileceğiz. Main metod aracılığı ile bu threadların priority değerleri

Aşağıda setPriority ve getPriority metodları ile ilgili örnek kod paylaşılmıştır.


class thread1 extends Thread{
    public int getThreadPriority(){ return this.getPriority(); }
    public void setThreadPriority(int priority){ this.setPriority(priority); }
}
class thread2 extends Thread{
    public int getThreadPriority(){ return this.getPriority(); }
    public void setThreadPriority(int priority){ this.setPriority(priority); }
}

public class ThreadExample extends Thread{
    static thread1 t1 = new thread1(); 
    static thread2 t2 = new thread2();
    static ThreadExample te = new ThreadExample();
    
     public static void main(String []args){
        System.out.println("Priority of main thread : " + te.getPriority());
        System.out.println("Priority of thread1 : " + t1.getPriority());
        System.out.println("Priority of thread2 : " + t2.getPriority());
        
        t1.setThreadPriority(6);
        t2.setThreadPriority(3);
        te.setPriority(Thread.MAX_PRIORITY);
        
        System.out.println("Priority of main thread : " + te.getPriority());
        System.out.println("Priority of thread1 : " + t1.getPriority());
        System.out.println("Priority of thread2 : " + t2.getPriority());
        
        //throws Exception in thread "main" java.lang.IllegalArgumentException
        te.setPriority(33);
     }
}
Program Çıktısı:

Priority of main thread : 5
Priority of thread1 : 5
Priority of thread2 : 5
Priority of main thread : 10
Priority of thread1 : 6
Priority of thread2 : 3
Exception in thread "main" java.lang.IllegalArgumentException
	at java.lang.Thread.setPriority(Thread.java:1089)
	at ThreadExample.main(ThreadExample.java:30)

Eğer aynı anda çalışan iki tane thread varsa ve bunların öncelik değerleri aynı ise bu threadların hangisinin ilk olarak çalıştırılacağını kesin olarak bilemeyiz. Bu threadların öncelik durumları thread scheduler tarafından belirlenir.

Bu yazımız buraya kadar.

Burak Hamdi TUFAN


Tags


Share this Post

Send with Whatsapp

Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment. Check your inputs!

Comments

  • There is no comment. Be the owner of first comment...