Dúvida sobre Thread

7 respostas
Marcio_Nogueira

Olá, tenho uma dúvida sobre quando utilizar o método yeld em uma thread.
Obrigado pela ajuda. :wink:

7 Respostas

P

este método serve para que a Thread corrente “ceda” o processamento para outras Threads

:wink:

zinho

Só acrescentando, ele “cede” a vez para outra Thread que possua a mesma prioridade da Thread corrente.
A Thread corrente então, passa do estado de Running para Runnable.
Porém, não existe garantia de que a JVM irá eleger outra Thread. Pode ser a mesma seja eleita novamente.
Confuso? Sim!

Petronio_Braga

Oi. Dá uma olhada nesse link abaixo. Ele fala pra que serve o método yield() da classe Thread.

http://www.javafree.org/javabb/viewtopic.jbb?t=6955

LPJava

qdo vc querer que todas as threads com a mesma prioridade sejam executada… o metodo yield() q vc quis dizer!! :D. Porém lembrando que nada é garantido quando se fala de threads!!

flw!

Dieval_Guizelini

Marcio,

o que o método faz acho que você pegou, talvez a questão seja “quando utilizar o método”.

A questão sobre prioridades das threads é quase secundária nesse ponto, principalmente no Windows em que não funciona muito bem…

Pois bem, a questão é para quê você tem usado as threads, quando se utiliza em aplicações swing por exemplo, normalmente você terá a thread principal e uma secundária (que faz o papel dos actionlistener) ou várias se você não seguir as boas práticas de programação.
Em fim, neste contexto, o uso de yield seria recomendado quando você quiser fazer algum processamento e manter a parte de desenho mais “atualizada” (menos congelada). Só que cuidado, a maior parte das threads listener tem prioridade menor que a thread principal.

No meu caso, a situação que melhor apresentou ganho de desempenho, foi quando eu utilizei várias threads processando um algoritmo genético (cada thread era uma família de soluções e de tempo em tempo eles trocavam as soluções). A idéia era “favorecer” a troca de execução, mas não exigir… nos duo-core tem dado bons resultados também nos algoritmos gulosos. Tais como: identificação de contorno em imagem, avaliações em gerais etc.

Vai depender muito do contexto, eu estou escrevendo uma aplicação que fica sincronizando um cache com o disco, neste caso, a cada iteração da thread de sincronia eu invoco o yield.

espero que te ajude.

fw

F

Somente lembrando que Java nao eh uma plataforma para aplicacoes de tempo real e a chamada do yield nao dá garantia de funcionar sempre, dependo muito do seu SO, virtual machine e de aplicacao.

LPJava

com thread nunca há garantias, podemos apenas influenciar na execucão! :smiley:

Criado 24 de janeiro de 2008
Ultima resposta 25 de jan. de 2008
Respostas 7
Participantes 7