public void run() {
System.out.println("Thread started");
while (true) { }
}
public static void main(String args[]) {
Thr th1 = new Thr();
Thr th2 = new Thr();
Thr th3 = new Thr();
th1.start();
th2.start();
th3.start();
}
}[/code]
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?
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:
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.