| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 08:11:52
|
cassio
GUJ Master
![[Avatar]](/images/avatar/8ae7398026ed8f2172aefd6cbc856bc8.jpg)
Membro desde: 19/06/2006 08:25:28
Mensagens: 1336
Localização: Caieiras-SP
Offline
|
Olá pessoal,
Tenho a seguinte dúvida:
uma thread colocada para dormir pode ser acordada antes de decorrido o tempo passado para o método sleep() ?!
|
Cássio Marques
Blog
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 08:29:58
|
spyrogyra
JavaChild
Membro desde: 22/10/2004 04:20:27
Mensagens: 147
Offline
|
Talvez resolva
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html#start()
[]´s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 08:30:42
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
É claro que sim.
Thread 1:
Thread 2:
Atenção:
a) Ctrl+C ou Ctrl+Break não geram uma "InterruptedException". Só "Thread.interrupt" é que gera a tal interrupção.
b) Parar uma cópia de arquivos com Thread.interrupt não funciona bem no Windows, já que no Windows não há o equivalente do Unix para o "signal".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 08:30:46
|
SkYr0x
What is classpath?
![[Avatar]](/images/avatar/d550216af6333c3ef7ccded988557b49.jpg)
Membro desde: 29/05/2006 10:20:52
Mensagens: 6
Offline
|
Eu acho que é só dar um notify() nela, assim como quando se usa o Thread.wait().
[]s
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 08:31:12
|
Rafael Nunes
Moderador
![[Avatar]](/images/avatar/d072677d210ac4c03ba046120f0802ec.png)
Membro desde: 09/10/2003 13:41:06
Mensagens: 2890
Localização: sao bernardo do campo
Offline
|
Quando você chama Thread.sleep(x), a JVM informa o sistema operacional para não mais atender esta Thread pelo tempo indicado.
Uma tentativa é chamar sleep() com um período menor do que foi informado, mas não sei se ainda assim funcionaria.
[edit]Ps:Thingol pra variar foi mais rápido e respondeu como se faz...hehe
|
------------------------------------------------------------------
"Think different? I'd be happy if most people would just think..."
http://www.yaw.com.br
http://twitter.com/rafanunes
http://twitter.com/youandwe
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 09:50:02
|
cassio
GUJ Master
![[Avatar]](/images/avatar/8ae7398026ed8f2172aefd6cbc856bc8.jpg)
Membro desde: 19/06/2006 08:25:28
Mensagens: 1336
Localização: Caieiras-SP
Offline
|
Quer dizer então que a única maneira de acordar antecipadamente uma thread é causando uma InterruptedException?!
Obrigado a todos que responderam
|
Cássio Marques
Blog
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 09:57:39
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O seu problema, como de costume, pode ser resolvido de formas diferentes.
Uma delas é "dormir com um olho aberto".
Por exemplo, em vez de dormir 10 segundos, você pode dormir 10 vezes 1 segundo.
Entre cada intervalo, você chama algum método que indica se você deve acordar antes.
Não use um intervalo pequeno demais (como um milissegundo); isso vai puxar CPU demais. Use pelo menos 10 milissegundos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 10:24:14
|
muldon
JavaTeenager
![[Avatar]](/images/avatar/5f25fbe144e4a81a1b0080b6c1032778.png)
Membro desde: 16/05/2006 14:06:03
Mensagens: 174
Offline
|
Eai amigo blz ?
Olha , seguinte, quando se trata de Threads, nada podemos garantir sobre o tempo ! ( referencia do Livro da Katty Sierra ). Ou seja, o fato de uma thread dormir 4 seg , nao significa q ela ira acordar logo apos isso e voltar ao estado runnig( Consulta os estados das threads ). Para vc acordar uma thread vc usa o notify. Mas se a thread que esta aguardando a liberacao do lock de um objeto receber um notify, ela tb sera candidata a voltar a processamento, mas nao é garantido q ira voltar imediatamente. Ou seja, nao é garantido que ela voltara ao processamento antes do tempo do sleep, pois isso depende de varios fatores, tais como a JVM local de cada maquina. Bom , espero ter ajudado, abraco !
|
Sun Certified Java Programmer 5 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 11:59:48
|
rmarin
JavaEvangelist
![[Avatar]](/images/avatar/46e0eae7d5217c79c3ef6b4c212b8c6f.jpg)
Membro desde: 13/07/2005 09:14:45
Mensagens: 360
Localização: São Paulo
Offline
|
muldon wrote:Para vc acordar uma thread vc usa o notify. Mas se a thread que esta aguardando a liberacao do lock de um objeto receber um notify, ela tb sera candidata a voltar a processamento, mas nao é garantido q ira voltar imediatamente. Ou seja, nao é garantido que ela voltara ao processamento antes do tempo do sleep, pois isso depende de varios fatores, tais como a JVM local de cada maquina. Bom , espero ter ajudado, abraco !
Pessoal, para trazer uma Thread para o estado "Rodável" - runnable - sendo que ela está dormindo, só mesmo chamando o método interrupt() da Thread que deseja acordar. O notify só serve quando a Thread está em estado wait, caso contrário a Thread continuará dormindo.
Se você quer dormir por um tempo determinado ou até que a Thread seja notificada, utilize o método sobrecarregado wait(long milliseconds), deste modo a Thread espera ser notificada até o tempó limite, caso contrário entra em execução.
|
Roberto Marin
__________________________________________
Odeio auto-nerds! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 11/09/2006 13:38:10
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
rmarin wrote:
Se você quer dormir por um tempo determinado ou até que a Thread seja notificada, utilize o método sobrecarregado wait(long milliseconds), deste modo a Thread espera ser notificada até o tempó limite, caso contrário entra em execução.
É isso aí. 5 estrelas
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/11/2009 10:52:16
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
rmarin wrote:Se você quer dormir por um tempo determinado ou até que a Thread seja notificada, utilize o método sobrecarregado wait(long milliseconds), deste modo a Thread espera ser notificada até o tempó limite, caso contrário entra em execução.
Só cuidado com pois existem duas pegadinhas.
a) Wait(0) faz a thread dormir para sempre;
b) A thread pode acordar antes do tempo estabelecido e antes do notify. Isso é chamado de spurious wakeup. Por isso, é bom colocar waits dentro de um bloco while, que garantam que a condição de saída foi satisfeita. No caso da condição ser só um timeout, fique atento ao que citei no item a (já que o cálculo do timeout pode retornar 0).
|
@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 |
|
|
 |
|
|