| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 08:40:41
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Imaginem a seguinte thread:
Fazendo a chamada desta Thread pelo construtor da seguinte maneira:
Até então tudo bem, o programa se desenvolve perfeitamente.
Agora, imaginem essa outra situação:
O que irá acontecer?
Tchauzin!
This message was edited 2 times. Last update was at 31/01/2011 15:27:28
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 08:51:45
|
laudenpower
JavaEvangelist
![[Avatar]](/images/avatar/090d1f9732c52fc3770cba691cff7d11.jpg)
Membro desde: 28/12/2008 21:00:08
Mensagens: 349
Offline
|
Nesse caso o método receive está dentro de um while com um InputStream chamando um read?
Se for isso ele vai ficar conectado até o servidor desconectar, ou então o próprio socket fechar a conexão.
Outra coisa que notei é que se a situação acima se confirmar, vais ter duas threads inacessíveis pois no loop ao dar new nas threads você troca a referência da thread já criada pela nova thread.
|
Enquanto cultivares teu saber, nada tens a temer!
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 08:59:55
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
laudenpower wrote:Nesse caso o método receive está dentro de um while com um InputStream chamando um read?
Se for isso ele vai ficar conectado até o servidor desconectar, ou então o próprio socket fechar a conexão.
Outra coisa que notei é que se a situação acima se confirmar, vais ter duas threads inacessíveis pois no loop ao dar new nas threads você troca a referência da thread já criada pela nova thread.
Oi,
Sem problemas. A idéia é ter 'N' Threads para cada porta socket.
A grande questão é o uso da CPU...
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 09:40:49
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Where are the Thread.starts() when we need them.....
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 15:13:21
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Estranho, após rodar 2 threads em paralelo a minha CPU fica 100%.
Alguma sugestão?
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 15:19:21
|
wellington.nogueira
GUJ Ranger
![[Avatar]](/images/avatar/00c1de56b1cbab48f9869c1460d70e76.png)
Membro desde: 11/08/2006 11:29:56
Mensagens: 914
Localização: Osasco-SP
Offline
|
Estranho teu problema.
Já vi CPU ir a 100% devido a while que criava muitas repetições num pequeno espaço de tempo.
que foi alterado para algo como
O exemplo é fictício mas era algo similar a este.
Não sei se um sleep no teu loop pode resolver este problema (ou criar novos).
|
57 45 4C 4C 49 4E 47 54 4F 4E
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
"Se você acha que programar em Java com Swing é simples? Acredite em mim, não é!"
http://developmentforever.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/12/2010 16:23:17
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
Sleep não resolve... =/
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/12/2010 14:02:05
|
gambazinho
Java Ninja
Membro desde: 15/09/2010 10:27:22
Mensagens: 254
Offline
|
conseguiram resolver o problema?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/12/2010 14:14:38
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
gambazinho wrote:conseguiram resolver o problema?
Geralmente é só dar um sleep mesmo. Não entendi pq a lina disse que no caso dela não resolveu.
O sleep precisa estar dentro do while. Quanto maior o tempo de sleep, mais ocioso ficará seu processador.
|
@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) 27/12/2010 08:07:19
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
ViniGodoy wrote:
gambazinho wrote:conseguiram resolver o problema?
Geralmente é só dar um sleep mesmo. Não entendi pq a lina disse que no caso dela não resolveu.
O sleep precisa estar dentro do while. Quanto maior o tempo de sleep, mais ocioso ficará seu processador.
Oi,
Pois então, já coloquei dentro do while e não resolveu... A questão é que não posso ficar me prendendo ao sleep, até porque o Receive() ficará em espera..
Vou ver o que faço aqui e qualquer coisa postarei o resultado.
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/12/2010 08:49:57
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
E que classe é essa que tem o Receive? A implementação de socket do Java deveria colocar a thread para dormir automaticamente, mas como esse método está em letras maiúsculas, creio que não seja a padrão. Se for algum tipo de socket com Selectors, ou sem espera, não seria problema usar o sleep também. No lugar do Thread.sleep, use então o Thread.yield. Isso dará a outras threads a oportunidade de rodarem. Embora talvez não reduza muito o consumo de CPU.
This message was edited 1 time. Last update was at 27/12/2010 08:50:34
|
@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) 27/12/2010 13:11:24
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
E que classe é essa que tem o Receive? A implementação de socket do Java deveria colocar a thread para dormir automaticamente, mas como esse método está em letras maiúsculas, creio que não seja a padrão.
Realmente. O método foi sobrescrito, porém continua aguardando por dados..
No lugar do Thread.sleep, use então o Thread.yield. Isso dará a outras threads a oportunidade de rodarem. Embora talvez não reduza muito o consumo de CPU.
Não tinha pensado nesse possibilidade... vou tentar!
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2011 15:27:14
|
lina
Moderador
![[Avatar]](/images/avatar/8849f0a976aa5332853e848655a1d28f.jpg)
Membro desde: 23/12/2006 21:05:04
Mensagens: 3083
Offline
|
Oi,
É... realmente o método Receive() não ficava aguardando. Tive que passar um timeout 0 para ele aguardar sempre por algum dado.
Tchauzin!
|
Você é novo no GUJ? Vai criar um tópico e colar seu código-fonte? Leia aqui antes, por favor!
http://www.guj.com.br/posts/list/50115.java
Se o seu tópico foi respondido e você está satisfeito, segue:
- Pressione o botão <Edit> de seu primeiro post
- Acrescente no final do título a tag [RESOLVIDO]
@gujgirl
http://www.restartfans.hdfree.com.br
Meu blog:
http://www.runthecode.wordpress.com
Tchauzin! |
|
|
 |
|
|