Bir üst ders içeriğinde anlatmış olduğumuz theradlerin çalışma önceliklerini belirlemek için setPriority metodunu kullanılmaktadır. Aşağıdaki örnekte thread3 en yüksek öneme sahipken diğeri daha az önemli olarak tanımlanmıştır.
public class ThreadLesson {
public static void main(String[] args) {
Thread thread1 = new Thread(new MyThread("thread1", 6));
Thread thread2 = new Thread(new MyThread("thread2", 5));
Thread thread3 = new Thread(new MyThread("thread3", 4));
thread3.setPriority(Thread.MAX_PRIORITY);
thread1.setPriority(Thread.MIN_PRIORITY);
thread2.setPriority(Thread.MIN_PRIORITY);
thread1.start();
thread2.start();
thread3.start();
}
}
Bu örnegimizde setPriority(Thread.MAX_PRIORITY) koduyla birlikte threadimizin en öncelikli çalışmasını sağlarken, setPriority(Thread.MIN_PRIORITY) koduyla threadimizin en düşük öncelikle çalışmasını sağladık.
İşlemin çıktısına baktığımızda ise thread1.start() kod da daha önce olmasına rağmen thread3 önceliklendirildiği için işlemini ilk bitirir.
thread1 : 0
thread2 : 0
thread3 : 0
thread1 : 1
thread3 : 1
thread2 : 1
thread3 : 2
thread1 : 2
thread3 : 3
thread2 : 2
thread1 : 3
thread2 : 3
thread1 : 4
thread2 : 4
thread1 : 5
Bu şekilde dilediğimiz kadar iş parçası tanımlayıp eşzamanlı olarak istediğimiz kadar işlem yapabilmekteyiz. Ancak unutulmaması gereken, oluşturulan her Thread'in sistemin belleğinden ve işlemciden bir pay aldığıdır. Aşırı sayıda Thread oluşturulması mikroişlemcinin işlemler arası geçiş yapması gerektiğinden ciddi performans kayıplarına yol açacaktır. Bu işlemleri düzenlemek için bir sonraki eğitim içeriğinde Executor sınıfının özelliklerini kullanacağız.