wait e notify duvida [ RESOLVIDO]  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

ae pessoal maior duvida em usar wait() e notify() a teoria deu para entender mais tanto implementar nunca consigo, nem saber aonde exatemente colcoar eles que mpuder dar esse help na implementacao bastante simples para que possa entender.. fico agradecido.. thread's eh uma loucura.. essa ideia de nao ser seguro me deixa inseguro rs!!

This message was edited 1 time. Last update was at 04/12/2007 23:50:35


Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

O que te deixa em dúvida?
Tente explicar o que pretendes fazer.

Até!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Oi Camilo.

O wait() e o notify() são usados quando você precisa que uma thread espere por alguma condição.

O wait() indica que a thread() deve esperar. Ele é sempre colocado dentro de um while, contendo a condição em que a thread deve se manter esperando. O notify() indica que a thread deve acordar e verificar a condição.

Um exemplo clássico onde o wait() e notify() são usados é no algoritmo do produtor/consumidor. Imagine que você tem uma thread que enche uma lista. E outra thread que processa os dados dessa lista. Pois bem, temos duas situações:
1. A thread produtora é mais rápida que a consumidora. Logo, a lista ficará cheia e o produtor deve esperar;
2. A thread consumidora é mais rápida que a produtora. Logo, a lista ficará vazia e a thread consumidora deverá esperar.

Fiz um algoritmo que demonstra isso nesse post, você pode conferir:
http://www.guj.com.br/posts/list/50466.java#265167

Achei ele meio complexo e pouco didático. Por isso elaborei esse outro exemplo. Aqui existe uma thread fazendo um processamento (que nesse caso é ficar imprimindo constantemente algo num JTextArea). Outra thread controla a thread impressora, pedindo para ela pausar ou continuar a impressão.

A condição que vigiaremos no wait() é se a thread está parada ou não. Informaremos a thread que ela deve prosseguir com um notifyAll(). Deixei o algoritmo bastante comentado. Ainda assim, qualquer dúvida, entre em contato!
 Nome do arquivo thread.zip [Disk] Download
 Descrição Demonstra o wait e notify de maneira simples. Existe uma classe controladora e outra impressora. A impressora controla uma outra thread, que pode ser pausada. O wait() e notifyAll() são usados para controlar essa pausa.
 Tamanho 2 Kbytes
 Baixado:  2279 vez(es)

[WWW]
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

opa!! boa vinny!! vo udar uma olhada!!!

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
pelegrini
JavaBaby

Membro desde: 27/03/2006 09:26:20
Mensagens: 91
Localização: São Paulo
Offline

Parabéns ViniGodoy, estava procurando algo para compreender o funcionamento do wait() e o notify() e o seu codigo ajudou muito !!!!


Abraços !!!

"Mais vale a lágrima da derrota do que a vergonha de não ter lutado."
[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Valeu. Daqui a pouco você pode dar parabéns pro código, já que ele vai fazer aniversário.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

hauha pior que é

Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
[WWW]
bgomes
Thread.start()

Membro desde: 20/02/2008 09:03:41
Mensagens: 26
Localização: Praia Grande/ Campinas
Offline

olha tambem tinha uma duvida para usar wait e notify, este exemplo ajudou muito...........

SCJP 5
[MSN]
netmage
Entusiasta Java

Membro desde: 16/09/2006 02:07:41
Mensagens: 22
Offline

Olha q daqui a pouco esse código vai pegar uma carteira de motorista!
Me esclareceu dúvidas tb!!
Abraços!
artyole
Smalltalk
[Avatar]

Membro desde: 27/07/2010 16:28:33
Mensagens: 1
Offline

Dei uma ressuscitada no tópico....
mas só pra falar que me ajudou pra caramba tbm!!

excelente!!!

This message was edited 1 time. Last update was at 02/08/2010 15:26:28

ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

3 aninhos! \o/

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
n4b0
What is classpath?

Membro desde: 23/09/2010 00:21:33
Mensagens: 8
Offline

Vlw cara ajudou mt essa explicação.

=)
tarzanDoido
Smalltalk

Membro desde: 01/04/2011 07:00:53
Mensagens: 2
Offline

Não entendi uma coisa.

os métodos wait() e notify() não deveriam ser chamados pala Thread? No exemplo do vinny, os métodos estão sendo chamados pela classe Impressora, porém não consigo enchergar como essa classe chama um método (que não recebe a classe ImpressoraRun como parâmetro, por exemplo) e pausa essa Thread.

O que "liga" as duas classes para uma parar a outra com um método sem retorno e sem parâmetro?


Só outra coisinha... pra que serve o método setDaemon(boolean on) da Thread.

Obrigado
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Threads e classes são coisas distintas.

Thread é a linha de execução. Uma thread vai rodando o programa linha-a-linha, e pode percorrer classes e objetos.
Quando a thread chama o wait, a thread que o chamou dorme, independente de qual classe esteja este wait.

Não confunda o conceito de thread (linha de execução) com a classe Thread do java (classe que dispara uma thread).

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
n4b0
What is classpath?

Membro desde: 23/09/2010 00:21:33
Mensagens: 8
Offline

Olás,

pelo que entendi de thread
o wait funciona em qualquer ambiente
syncronized ou com o lock do objeto.

exemplo:

se você utilizar um bloco syncronized dentro de um programa que não seja thread ele
só irá requerer que para aquele trecho de código é obrigatório que se tenha o lock do objeto para
se executar, já o wait() irá parar as threads que passarem por ali não que necessariamente a classe
tenha que ter herdado Thread. Entretanto o bloco syncronized só faz sentido utilizando thread que será
o único jeito de se ter um processamento "paralelo" de uma área critica.

Resumindo você pode colocar ambiente syncronized a torto e a direito em suas classe se há possibilidade
de a mesma ser utilizada por uma thread.

att,

 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team