- Every Thread in java has some priority. It may be default priority generated by JVM (or) customized priority provided by the programmer.
- The valid range of Thread priorities is 1 to 10[but not 0 to 10] where 1 is the least priority and 10 is highest priority.
- Thread class defines the following constants to represent some standard priorities.
2. Thread. MAX_PRIORITY 10
3. Thread. NORM_PRIORITY 5
- There are no constants like Thread.LOW_PRIORITY, Thread.HIGH_PRIORITY
- Thread scheduler uses these priorities while allocating CPU(Processor).
- The Thread which is having highest priority will get chance for first execution.
- If 2 Threads having the same priority then we can't expect exact execution order it depends on Thread scheduler.
- Thread class defines the following methods to get and set the priority of a Thread.
2. public final void setPriority(int newPriority);//the allowed values are 1 to 10
- The allowed values are 1 to 10 otherwise we will get runtime exception saying "IllegalArgumentException".
t.setPriority(8);//valid
t.setPriority(18);//IllegalArgumentException
Default priority:
- The default priority only for the main Thread is 5. But for all the remaining Threads the default priority will be inheriting from parent to child. That is whatever the priority parent has by default the same priority will be for the child also.
class MyThread extends
Thread
{}
class ThreadPriorityDemo
{
public static void
main(String[] args)
{
System.out.println(Thread.currentThread().getPriority());//5
Thread.currentThread().setPriority(9);
MyThread
t=new MyThread();
System.out.println(t.getPriority());//9
}
}
|
Example 2:
class MyThread extends
Thread
{
public void run()
{
for(int
i=0;i<10;i++)
{
System.out.println("child
thread");
}
}
}
class ThreadPriorityDemo
{
public static void
main(String[] args)
{
MyThread
t=new MyThread();
//t.setPriority(10); //----> 1 t.start();
for(int
i=0;i<10;i++)
{
System.out.println("main
thread");
}
}
}
|
- If we are commenting line 1 then both main and child Threads will have the same priority and hence we can't expect exact execution order.
- If we are not commenting line 1 then child Thread has the priority 10 and main Thread has the priority 5 hence child Thread will get chance for execution and after completing child Thread main Thread will get the chance in this the output is:
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
child thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
main thread
- Some operating systems(like windowsXP) may not provide proper support for Thread priorities. We have to install separate bats provided by vendor to provide support for priorities.
Thanks..!!
No comments:
Post a Comment