Jump to content
stellarium

Problema com Threads... interrupt() e wait()

Recommended Posts

stellarium

Boa tarde 3b63d1616c5dfcf29f8a7a031aaa7cad.gif

A minha duvida prende-se com uma confusão de conceitos no que diz respeito aos métodos wait() e interrupt() das Threads que tenho sido obrigado a usar num projecto de programação que tenho de desenvolver...

Basicamente tenho duas imagens que tentam aceder a uma mesma célula provocando problemas de sincronização. Quando uma imagem detecta a outra na célula imediatamente a seguir lança um wait() e as imagens ficam em espera... A duvida chega aqui quando eu pretendo fazer as imagens moverem-se de novo. O notify()/notifyAll() não esta a funcionar neste caso não sei bem porque...

Basicamente, para tentar fazer as imagens moverem se de novo tenho um mouselistener que me procura a imagem, mete-lhe uma nova direcção e tenta-lhe fazer um notify (através do debug do eclipse consigo detectar que o programa chega a correr aqui, apenas parece nao fazer o notify)

Falaram-me de experimentar, depois da thread estar em wait(), de usar o mouselistener e, depois de mudar as posição, interromper a Thread, e que quando apanhasse a excepção provocada pelo interrupt(), fazer com que a Thread verifique novamente se se pode mover, se se poder faz o notify().

É aqui que nasce a minha duvida. Como é que apanhando a excepção faço-a verificar se se pode mover, dado que já está em wait() à espera de ser notificada?

Share this post


Link to post
Share on other sites
HappyHippyHippo

ok. ora bem.

> primeiro de tudo. tu tens no total 3 threads = 2 para manipular uma imagem cada + 1 da janela

a ideia fundamental a reter é : uma imagem não é uma thread, mas sim um objecto manipulado num thread.

e o thread da janela é a razão porque o mouseListener é executado, porque senão estava tudo parado.

ps :

não faço ideia porque razão é que será o rato a voltar a por tudo a andar, mas tu lá sabes

eu não ia gostar de ver tudo parado e ter que mover o rato ou outra coisa para por tudo a andar novamente ...

> segundo, como te disse acima, apesar do thread estar parado, não quer dizer que deixas de poder manipular a imagem. é isso que o mouseListener deverá fazer.

- verificar se o thread se encontra parado, e se sim

- alterar a direção da imagem associada ao thread

- notificar o thread para executar

conclusão : nada de interrupt ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
stellarium

Antes de mais nada obrigado pela resposta HappyHippyHippo ;)

Bom, esqueci-me de dizer que sim as imagens são objectos threads, peço desculpa (apenas disse imagens poq calhou).

A razao de ser o rato a voltar a por tudo a andar não é minha, foi do prof que fez o enunciado visto ser um trabalho de faculdade :)

Eu tinha uma variavel boolean no qual a thread só se movia se esta variavel estivesse a true... e o mouselistener, quando ela estava a false conseguia alterá-la e voltar com que a thread voltasse a mexer. Acontece que o prof nao gostou de que eu usasse a variável e disse que visto as threads estarem a competir por um recurso partilhado para eu usar wait() e notify().. epa só que nao funciona, não sei porque...

Diz me uma coisa. Quando as threads estão em wait() se eu as interromper não posso apanhar a excepção lançada pelo interrupt() e voltar a mandar mexer a thread? Se sim, como?

Obrigado!

Share this post


Link to post
Share on other sites
stellarium

for (int i = 0; i < importantInfo.length; i++) {
// Pause for 4 seconds
try {
	Thread.sleep(4000);
} catch (InterruptedException e) {
	// We've been interrupted: no more messages.
	return;
}
// Print a message
System.out.println(importantInfo[i]);
}

No exemplo quando é executado o "return;" a thread volta a fazer o seu run()?

Edited by Rui Carlos
geshi

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.