Dúvida Thread

De acordo com o seguinte código:

[code]class Thr extends Thread {
Thr() {
setPriority(10);
}

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?

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ó…

Então não existe nenhuma possibilidade do primeiro Thread entrar em execução e impedir os outros processarem?

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.

Boas notícias vieram com o lançamento do Red Hat 9 que oferece suporte a native threads. Existe até um artigo no site da SUN falando sobre os benefícios da combinação JAVA X RED HAT 9.

[]s, Welington B. Souza

Ah, Ok, agora entendi porque é dependente da plataforma…

Valeu…