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.
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
Comments