Todos os threads serão executados ou somente o primeiro? Alguém saberia me explicar o que acontece quando executado esse código, existe alguma dependência da plataforma?
Todos os Threads serão executados … ou melhor será criado um processo com três linhas de execussão (thread)…
se vc tem uma máquina monoprocessada as 03 threads concorrerão ao uso do processador…
se vc tiver uma máquina multiprocessada os Threads serão executados em paralelo…
a prioriade não terá efeito, pois é a mesma para todas Threads…
Acho que é só…
elvishr
Então não existe nenhuma possibilidade do primeiro Thread entrar em execução e impedir os outros processarem?
rigolin
Na realidade o Sistema Operacional que irá gerenciar o uso do processador… os SO modernos possuem um tempo (quantum) ou fatia de tempo em que cada Thread pode usar o processador… então a primeira Thread usará o processador por um tempo t será interrompida e colocada em uma fila de espera… então a segunda Thread entrará em execução por um tempo t e será interrompida…
Isso aí… seu Sistema Operacional deverá garantir isso… use um de qualidade… :lol:
wbsouza
Completando o que o rigolin disse, Depende do tipo de escalonamento de threads existe no sistema operacional:
O Windows usa time sharing, que divide o tempo de execução para as threads em execução. Oferece suporte para native threads pelo kernel.
O solaris tb tem suporte para native threads usando time sharing, mas não vem habilitado por default. É necessário configurar a VM para isto.
A implementação default de threads no Linux não usa native threads. O kernel não oferece este tipo de suporte “every thread in linux is a process”. Ao invés disso fornece algo parecido com threads (processos filhos), mas de qq forma é um processo. Assim se vc tiver 200 threads java e der um ps na console do linux verá 200 processos java, o que acaba sendo menos eficiente que uma thread real. Além disso, o escalonamento de processos usa Round Robin (nao é time sharing). :? Assim, se a primeira thread ficar em execução e não chamar o método yeld(), sleep() ou wait(), a segunda e terceira thread nunca entrará em execução.