| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/02/2007 23:47:26
|
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/
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/02/2007 23:53:38
|
maquiavelbona
JWizard
![[Avatar]](/images/avatar/24bea84d52e6a1f8025e313c2ffff50a.jpg)
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) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2007 01:26:14
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
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) |
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/02/2007 08:31:02
|
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/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2007 17:27:52
|
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." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2007 19:00:28
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/12/2007 23:49:18
|
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/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/05/2008 13:57:05
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2010 01:24:30
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2010 15:24:39
|
artyole
Smalltalk
![[Avatar]](/images/avatar/086a3f98ee71c9f3390554976619cf82.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/08/2010 16:40:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 28/03/2011 12:38:33
|
n4b0
What is classpath?
Membro desde: 23/09/2010 00:21:33
Mensagens: 8
Offline
|
Vlw cara ajudou mt essa explicação.
=)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 07:19:08
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 07:50:42
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 08:08:07
|
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,
|
|
|
 |
|
|