| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:00:50
|
genildof
Debugger
![[Avatar]](/images/avatar/6e2c22ab08479b1da4206a0c5d7da31e.jpg)
Membro desde: 30/09/2006 09:38:16
Mensagens: 70
Localização: Campo Grande - MS
Offline
|
Prezados, estou precisando de algo do tipo:
Quanto à sockets, tudo ok, o projeto já está rodando. Mas quero dar agilidade na execução da tarefa, preciso de pelo menos 4 linhas de execução simultânea. Tenho pesquisado no google e guj, entretanto como não tenho experiência no uso de threads e filas, gostaria que alguem me indicasse algum link específico sobre o assunto, ou mesmo algum exemplo sobre como implementar essa funcionalidade.
Grato.
|
/genildof. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:13:19
|
dreamspeaker
GUJ Ranger
![[Avatar]](/images/avatar/c862890c3fd3e3d203580.jpg)
Membro desde: 22/04/2003 10:09:58
Mensagens: 752
Localização: SP - Capitar
Offline
|
Mas sua dúvida diz respeito a como montar a fila FIFO?
Dá uma olhada aqui (Java 5)
|
André Barbosa
Para de encher o saco e vai doar sangue!
twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:32:31
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
De cara vou avisando que se não tem muito conhecimento de threads então já tem programa para o fim de semana.
Você pode implantar um pool de threads com a classe ThreadPoolExecutor.
As 2 coisas importantes a ter em mente ao usar esta classe é o tamanho do pool e a fila usada para as tasks que podem ser passados no construtor.
A fila deve ser uma BlockingQueue e a escolha depende de:
a) SynchronousQueue = Uma fila de tamanho ZERO, isto é, o que entra é pego logo em seguida. Funciona apenas como um ponto de encontro entre Threads
b) Uma fila ilimitada tal como LinkedBlockingQueue com capacidade ilimitada. Adicionar uma task na fila sempre tem sucesso e nenhuma task é rejeitada.
c) Uma fila limitada tal como LinkedBlockingQueue com capacidade limitada ou um ArrayBlockingQueue
Leia com calma o javadoc da classe ThreadPoolExecutor e também das interfaces que implementa. Há exemplos que te interessam. E google por mais explicações sobre estas classes cujo uso é difícil de explicar em poucas palavras.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:40:59
|
genildof
Debugger
![[Avatar]](/images/avatar/6e2c22ab08479b1da4206a0c5d7da31e.jpg)
Membro desde: 30/09/2006 09:38:16
Mensagens: 70
Localização: Campo Grande - MS
Offline
|
Sim, e várias threads acessando-a sincronizadamente.
|
/genildof. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:45:52
|
dreamspeaker
GUJ Ranger
![[Avatar]](/images/avatar/c862890c3fd3e3d203580.jpg)
Membro desde: 22/04/2003 10:09:58
Mensagens: 752
Localização: SP - Capitar
Offline
|
Luca wrote:Olá ...
Nada como o [COMPLETE ANSWER MODE ON] do Luca... hehehe...
Bem legal!
|
André Barbosa
Para de encher o saco e vai doar sangue!
twitter |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:59:22
|
Luca
Moderador
![[Avatar]](/images/avatar/17e62166fc8586dfa4d1bc0e1742c08b.jpg)
Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline
|
Olá
dreamspeaker wrote:Nada como o [COMPLETE ANSWER MODE ON] do Luca... hehehe...
Bem, para ficar mais completa eu deveria ter sugerido a ele o uso do java.nio como alternativa ao modelo dele. Com um ServerSocketChannel ele resolve o problema mais rapidamente e pode passar o fim de semana curtindo o Redibul-er-reice.
[]s
Luca
|
Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."
CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 19:24:36
|
genildof
Debugger
![[Avatar]](/images/avatar/6e2c22ab08479b1da4206a0c5d7da31e.jpg)
Membro desde: 30/09/2006 09:38:16
Mensagens: 70
Localização: Campo Grande - MS
Offline
|
Obrigado pelas sugestões. Vou iniciar a caminhada...
Valeu.
|
/genildof. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 19:46:55
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Além do ThreadPoolExecutors, não custa dar uma olhada em uma fábrica bem prático para ele, a classe Executors.
Basicamente, você faz:
O resto, é como o Luca falou... E esta introdução do Brian Goetz pode te ajudar.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/04/2007 13:44:21
|
genildof
Debugger
![[Avatar]](/images/avatar/6e2c22ab08479b1da4206a0c5d7da31e.jpg)
Membro desde: 30/09/2006 09:38:16
Mensagens: 70
Localização: Campo Grande - MS
Offline
|
Luca wrote:b) Uma fila ilimitada tal como LinkedBlockingQueue com capacidade ilimitada. Adicionar uma task na fila sempre tem sucesso e nenhuma task é rejeitada.
ViniGodoy wrote:
De acordo com as dicas, problema resolvido. Para constar no tópico:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/04/2007 12:21:16
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Ficou legal tua implementação.
Se quiser conhecer um pouco mais do java.util.concurrent tente reformular o seu problema para executar com um CompletionService.
Dá uma olhada no artigo do Goetz que eu te passei pra ver como fazer isso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2008 11:34:46
|
marciobarroso
Virtual Machine Man
![[Avatar]](/images/avatar/6828f61cee49c7a4da0f9c1d3e03b857.jpg)
Membro desde: 13/05/2005 23:17:13
Mensagens: 508
Localização: Barueri / SP / BR
Offline
|
Pessoal,
Eu usei a implementação acima funcionou perfeitamente, mas estou com um problema.
A versão do java é 1.4 e não posso usar o ExecutorService.
Alguém teria uma implementação de um PoolThread compatível com esta versão para me ajudar?
Encontrei alguns exemplos no site da IBM, mas o comportamento na execução foi muito estranho. A cada execução eu tenho um comportamento diferente e a thread nunca morre no fim das execuções.
[]'s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/10/2009 15:52:49
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline
|
pessoal, eu peço desculpa pro ter revivido o tópico, se bem que o assunto é +- o mesmo.
eu quero criar um pool de threads para fazer determinado trabalho, então aproveitei o exemplo do genildof, porém usando FixedThreadPool, ja que quero um tamanho fixo para o pool de threads. O problema é que as vezes alguma thread não é finalizada, enquanto que outras vezes executa certinho, a quantidade de threads do pool que executa por ciclo, e depois fecha todas, se alguma só pode entrar para executar depois que a fila estava vazia ela simplesmente termina, o ruim é quando essa ultima thread não termina, o que é o mais comum...
alguém saberia me dizer como corrigir isso?
segue o código do nosso amigo ai abaixo, depois que adaptei:
um exemplo de saida onde todas as threads terminam certinho:
agora um exemplo onde alguma não termina, eu acabo precisando fecha pelo botão do proprio eclipse:
nessa execução ai, foi a primeira que não terminou, mais nem sempre é ela, tiveram outras vezes também que quem não termina é a segunda por exemplo, conforme abaixo:
|
espero ter ajudado...
falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
|
|
|
 |
|
|