Duvida de ultima hora: Threads

Ae galera to com uma duvida em Threads:
os metodos yield e sleep liberam o lock do objeto tb alem de mover os threads para blocking???

Dae…

Quando um metodo sleep é chamado em uma thread que esta executando esta thread entra no estado de “adormecido” e torna-se disponivel depois que o seu tempo designado para dormir expira.

Uma thread pode chamar o metodo yield para a outra thread a chance de ser executado. Na verdade sempre que uma thread de prioridade mais alta torna-se pronta, a thread atual sofre preempção, então uma thread pode ceder seu lugar a um thread de prioridade mais alta porque a primeira thread tera sofrido preempcao quando a thread de prioridade mais alta torna-se pronta.

ou seja … o metodo sleep adormece a thead, o metodo yield a thread esta pronta para execução mas espera quem tem prioridade maior.

[]´s

Ola. Isso pode acontecer em algumas JVMs, mas lembre-se que isto definitivamente NAO esta na especificacao de JVMs. Se uma thread de prioridade mais alta aparecer de reprente, a JVM pode escolher em nao interromper a atual. Isso fica a cargo da JVM. Do mesmo jeito que a gente nunca sabe quando o GC vai rodar.

Mas claro que na maioria das implementacoes de JVM, ela vai fazer preempecao na que estiver rodando.

Outra coisa: o metodo sleep não solta os locks. Creio que o yield tambem nao, mas precisa ver.

O sleep() permite que outro thread de outro objeto possa rodar, ele nao libera o lock do objeto no qual esta rodando( ao contrario que de wait(), que libera o lock ). Em outras palavras, uma chama a sleep() coloca o thread atual para “dormir”, porem nao libera o lock dele.

yeld() permite que alguem pegue a vez para rodar, porem isso nao eh garantido. Ou seja, pode acontecer de voce chamar yeld() e imediatamente apos o mesmo thread voltar a rodar.

Rafael

É, para a prova é importante lembrar isso que o Paulo falou.
Caem várias questões perguntando sobre comportamento garantido de threads, e no caso é apenas algo que pode acontecer.

Inclusive, se aparecer uma questão de threads que você esteja totalmente sem idéia da resposta, minha dica é escolher a alternativa de “não dá para ter certeza sobre o comportamento”, que costuma aparecer (mas isso é só uma dica de chute, o ideal é saber a resposta mesmo).

duardor,

Relaxe, você vai conseguir. Muitos torcem pelo seu sucesso.
Sua prova é 31, amanhã? Pois vá tranquilo, você sabe. :wink:

ehhehe
valeu alfredo
mas seguinte galera:
sleep entao nao libera o lock neh…
caso uma thread esteja com o lock de um objeto e chame sleep (1 hora) digamos que todas as threads dependam desse lock… dai minha aplicacao vai para por uma hora??
e sobre yield ??? caso a Thread ceda lugar pra outra de maior prioridade ela iria liberar o lock neh???

Abracos