[Thread] IllegalMonitorStateException  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
rodrigousp
JavaEvangelist
[Avatar]

Membro desde: 09/10/2003 14:23:31
Mensagens: 379
Offline

Gente alguém poderia dar um mamão com threads !?
Qual o problema com desse programa ???








[Code]
(...)
x = 997 y = 997 worker number 1
x = 998 y = 998 worker number 0
x = 999 y = 999 worker number 3
java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at TesteConsumer.run(TesteConsumer.java:23)
java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at TesteConsumer.run(TesteConsumer.java:23)
java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at TesteConsumer.run(TesteConsumer.java:23)
java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.notify(Native Method)
at TesteConsumer.run(TesteConsumer.java:23)
(...)
[/code]

Rodrigo di Lorenzo Lopes - blogger
[MSN] [ICQ]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Você não pode chamar wait, notify ou notifyAll se não possui a lock para o objeto.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
rodrigousp
JavaEvangelist
[Avatar]

Membro desde: 09/10/2003 14:23:31
Mensagens: 379
Offline

Como assim ???

Como eu faço para a Thread principal do programa esperar o trabalhadores terminarem o serviço??? Como os trabalhadores podem notificar a Thread principal que seu serviço terminou ???

Rodrigo di Lorenzo Lopes - blogger
[MSN] [ICQ]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

Seguinte:



Vai lançar IllegalMonitorStateException



Não vai.


Entende isso primeiro, depois como wait/notify e synchronized interagem entre sí e por fim resolve seu problema.

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
rodrigousp
JavaEvangelist
[Avatar]

Membro desde: 09/10/2003 14:23:31
Mensagens: 379
Offline

Mmm... isso significa que eu não posso sair assim notificando os threads!

Minha solução foi passar o employer (Thead principal) para os trabalhadores via construtor. Ai eu usei o syncronized (employer) { employer.notify()};
e tudo passou a funcionar.


---
Comentário: Em Perl, por exemplo, existem milhões de formas de resolver um mesmo problema. Muitas vezes o que a gente não sabe, é (qual) a maneira adequada para resolver um problema. Não imaginei que não fosse possível resolver sem usar syncronized(object) porque em vários lugares dizia-se que isto tem o mesmo efeito de utilizar o modificar syncronized no método.

Rodrigo di Lorenzo Lopes - blogger
[MSN] [ICQ]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team