Because you are allowing the threads to sleep alternatively you are giving the other thread to get its work done. In the program above i have not allowed the threads to sleep. Thus the thread with a greater priority keeps working. However note that priority is not the basis on which you should schedule your work. You should not expect that a thread with a higher priority will always get the cpu and a thread with a lower priority will never get the cpu. This is because of Time Slicing.