William,
A menos que o seu computador tenha dois processadores, nao eh verdadeira a
afirmacao de que os threads sao, literalmente falando, executados em
paralelo. O uso de threads eh indicado principalmente em aplicacoes onde uma
determinada tarefa bloquearia toda applicacao por estar esperando a
liberacao de algum recurso, por exemplo.
Operacoes de Input/Output sao um bom exemplo disto. Enquanto os dados estao
sendo fisicamente gravados no disco e, consequentemente, o thread nao
precisa do processador, outro thread pode estar fazendo alguma coisa. Se
voce tiver dois threads que durante 100% do tempo de execucao utilizam o
processador, eh provavel que o seu programa fique ate mesmo mais lento, por
causa do trabalho extra que a maquina virtual tera para fazer o
escalonamento.
Em outras palavras, se um thread leva 10 segundos para completar uma tarefa
que utiliza o processador 100% do seu tempo, dois threads vao,
necessariamente levar no minimo 20 segundos, a menos, eh claro, que voce
tenha dois processadores, caso no qual os threads serao _realmente_
executados em paralelo. Se isso nao fosse verdade seria muito bom, ja que eu
poderia criar infinitos threads e todos eles iriam acabar sempre em 10
segundos, o que nao faz sentido algum. Ate onde eu sei, a maquina virtual
nao tem como, por exemplo, analisar as instrucoes de cada um dos threads e
verificar se algumas delas podem ser compartilhadas e "reutilizadas",
poupando o trabalho do processador e diminuindo o tempo total de execucao
dos threads.
Nao acho que voce esteja fazendo nada de errado. Talvez o comportamento da
sua applicacao, na realidade, seja exatamente o previsto. Isso ira depender
de quao famintos pelo processador seus threads sao. Quanto ao segundo thread
so comecar depois do primeiro, talvez voce tenha que usar o metodo yield()
(de uma olhada na documentacao). Mas mais uma vez: se voce ficar invocando o
yield() toda hora, sua maquina virtual vai ter que trabalhar mais para
escalonar os threads, diminuindo a performance de qua aplicacao.
Bem, acho que eh isso. Espero ter ajudado.
Grande abraco e boa sorte.
Andre Mendonca
Sakonnet Technology
596 Broadway, Suite 1008
New York, NY 10028
http://www.sknt.com
(212) 343-3170 x109
--- Wiliam Machado <[EMAIL PROTECTED]> wrote:
> Amigos,
>
> Estou com uma dzvida terrmvel, mas simples.
>
> Tenho duas Threads rodando, cada uma apresenta uma
> classe Stand-Alone. Em cada interface tenho dois
> botues, quando dou um click no botao1 (de qualquer
> uma das duas janelas) sco disparadas outras duas
> Threads que devem fazer em paralelo a atualizagco
> das telas usando cada uma o mitodo paint prsprio (A
> comunicagco i feita por Socktes informando qual
> atualizagco deve ser feita).
> Bem o problema i que: quando i iniciado a primeira
> Thread do botco, ela altera a interface e "dorme"
> por 10 segundos, a segunda Thread foi disparada em
> paralelo, porim ela tambim deveria alterar a tela e
> "dormir" por 10 segundos. As duas deveriam terminar
> juntas uma vez que sco paralelas e dormem o mesmo
> tempo SS que a segunda ss inicia quando a primeira
> acorda me dando um tempo final de 20 segundos ao
> invis de 10.
>
> Alguim tem alguma idiia do que acontece???
>
> Grato,
>
> Wiliam Machado
>
__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail.
http://personal.mail.yahoo.com/
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuarios Java da Sucesu-SP
dzvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------
------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br - Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------