Dúvida Thread

5 respostas
elvishr

De acordo com o seguinte código:

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();
	}
}

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?

5 Respostas

rigolin

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.

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

elvishr

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

Valeu…

Criado 19 de outubro de 2003
Ultima resposta 19 de out. de 2003
Respostas 5
Participantes 3