Yield

Extraído de: http://java.sun.com/docs/books/tutorial/essential/threads/priority.html: "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. "



E se houverem threads com prioridade maior? ainda assim o yield será ignorado?

Teoricamente, simplesmente não deveriam existir threads de prioridade maior. Pois é sempre a com maior prioridade que já está sendo executada. Mesmo se estivesse sendo executada uma com prioridade média, se aparecesse uma com prioridade alta ele muda automaticamente.

O que pode acontecer é mais de uma thread ter a prioridade máxima. Nesse caso, dependendo do sistema operacional, ou ele divide o tempo entre essas threads de prioridade igual e alta, ou então ele executa uma de cada vez. Neste segundo caso, se você quer que altere entre as threads você usa o método yield.



(Obs.: Eu disse teoricamente porque um sistema operacional maluco pode por um motivo obscuro não querer rodar a thread de maior prioridade primeiro, e aí não vai depender do programador tentar forçar isso, mas em geral tudo funciona como deveria)