Nasir, I did a little checking around on this and it looks like the answer is not clear cut. At the Sun site, the Java Tutorial seems to contradict itself by making these three statements: "Only when that thread stops, yields, or becomes not runnable for some reason will a lower priority thread start executing." "The yield method gives other threads of the same priority a chance to run. If there are no equal priority threads that are runnable, then the yield is ignored." "Rule of thumb: At any given time, the highest priority thread is running. However, this is not guaranteed. The thread scheduler may choose to run a lower priority thread to avoid starvation." The document states three times that the yield() will be ignored if there is not an equal priority thread in a runnable state, so I assume that this is the case and that your assumption is correct. It does seem that the scheduler can opt to give time to a lower-priority thread, when it deems necessary so's not to "starve" the other thread. I think this all depends on the version and configuration of the scheduler though. Have fun Clear as mud, huh?