| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/06/2010 00:14:57
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
Duvida,
A threadC não continua, não recebe o notifyAll da ThreadA.
Sabem o motivo?
Vlw
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/06/2010 06:24:41
|
yastorm
JavaChild
![[Avatar]](/images/avatar/e5055341d2150265efc4dee66d5fbab6.jpg)
Membro desde: 28/03/2010 00:21:08
Mensagens: 128
Offline
|
Acho que é porque o contexto da sincronização na main Thread está no objeto b. Logo, o notifyAll irá propagar apenas para a Thread b, pos a Thread c está sincronizando para si mesmo.
|
Sun Certified Programmer for Java 2 Platform 1.6
Sun Certified Web Component Developer for the Java Platform 5
Next -> SCBCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/06/2010 08:19:54
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
yastorm wrote:Acho que é porque o contexto da sincronização na main Thread está no objeto b. Logo, o notifyAll irá propagar apenas para a Thread b, pos a Thread c está sincronizando para si mesmo.
Exatamente. O Notify (ou notifyAll, como neste caso) "notifica" somente a(s) thread(s) que estiverem aguardando no objeto em que você chama o notify (ou notifyAll).
A Thread C ficará aguardando eternamente, já que você nunca chama notify no objeto que representa a thread C, que por acaso é o objeto em que ela espera.
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/06/2010 23:58:25
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
Entendi, nesse caso , basta eu colocar um notify para C tambem.
O que eu queria é ver o notifyAll propagando a liberação de mais thread, alguem sabe como fazer isso no exemplo?
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/06/2010 00:02:57
|
rodrigo.bossini
GUJ Master
![[Avatar]](/images/avatar/3b6fe2dc98ceed6e1608e7cfc662ab11.jpg)
Membro desde: 01/07/2008 20:59:17
Mensagens: 1055
Offline
|
Você pode, por exemplo, criar um objeto no metodo main, e passar ele para ambas as threads, B e C, via construtor, e fazê-lar dar wait neste objeto. Assim no main, você dá um notifyAll neste objeto e ambas as threads B e C serão afetadas. Só tome cuidado que seu código é arriscado: Main pode invocar notifyALL antes que uma das threads B ou C, ou até mesmo as duas tenham invocado wait. Neste caso as duas ficaram aguardando para sempre.
|
http://www.rodrigobossini.com.br/
Meu Twitter:@rodrigobossini Se uma pessoa fala português há 30 anos e ainda não aprendeu, por que é que vou acreditar que ela está programando em alguma linguagem de programação há apenas 10 anos e sabe o que está fazendo? |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2010 14:24:05
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
rod.attack wrote:Você pode, por exemplo, criar um objeto no metodo main, e passar ele para ambas as threads, B e C....
This message was edited 3 times. Last update was at 13/06/2010 15:45:37
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2010 18:24:39
|
yastorm
JavaChild
![[Avatar]](/images/avatar/e5055341d2150265efc4dee66d5fbab6.jpg)
Membro desde: 28/03/2010 00:21:08
Mensagens: 128
Offline
|
Acho que você não entendeu o que o amigo quis dizer. As três Threads precisam ter um objeto em comum. As Thread b e c não fazem ideia de que a Thread a existe.
Olhe abaixo:
Olhe esse exemplo que tirei do livro da Kathy. Os objetos Reader tem um objeto Calculator em comum. Esse é o elo de ligação entre o notify.
|
Sun Certified Programmer for Java 2 Platform 1.6
Sun Certified Web Component Developer for the Java Platform 5
Next -> SCBCD |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/06/2010 20:03:31
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
yastorm wrote:Acho que você não entendeu o que o amigo quis dizer. As três Threads precisam ter um objeto em comum. As Thread b e c não fazem ideia de que a Thread a existe.
Olhe abaixo:
Olhe esse exemplo que tirei do livro da Kathy. Os objetos Reader tem um objeto Calculator em comum. Esse é o elo de ligação entre o notify.
Eu tinha visto esse exemplo e o que pegou dele é, com ou sem o notifyAll o resultado é o mesmo.
Estou boiando nesse notifyAll
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2010 15:32:56
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
Ninguem? Hehehe
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/06/2010 15:47:51
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Rode o programa abaixo e veja por que talvez você esteja tendo problemas.
De modo geral, wait + notify é a mesma coisa que goto para threads; é uma forma muito básica e muito difícil de usar. Se precisar de sincronização entre threads, use alguma classe de java.util.concurrent.
|
|
|
 |
|
|