tenho um thread que chamo ela a cada 500 milisegundos, nesta thread estou chamando um método que fica esperando dados de um E/S . A Pergunta é se eu ficar preso neste método por mais
de 500 milissegundos a thread fica esperando ?? ou ela é chamada de volta a cada 500ms ?
Como assim “eu chamo ela a cada 500 milisegundos”?
Você tem uma thread e fica dando sleep de 500 milisegundos a cada ciclo do seu processo ou cria uma nova thread a cada 500 milisegundos?
Se você estiver usado o sleep não vai ter problema, pois enquanto ela estiver esperando pela entrada não vai chegar no trecho do sleep… agora se estiver criando uma thread nova toda vez, então ela vai ser chamada independente do tempo em que a primeira ficou esperando…
Espero que ajude.
[]s
Éberson
muehlner
Pelo que sei de Threads se você coloca um synchronized ele funciona igual a uma “chave” que tranca a porta e nenhuma outra Thread pode ser executada enquanto essa não chegar ao fim
Pelo que sei de Threads se você coloca um synchronized ele funciona igual a uma “chave” que tranca a porta e nenhuma outra Thread pode ser executada enquanto essa não chegar ao fim
Se ele estiver instanciando uma nova thread a cada ciclo esse bloco sincronizado não vai servir pra nada… pois as instâncias serão diferentes… e esse “lock” não vai ter nada útil…
Sincronizar um recurso compartilhado poderia ser uma solução, mas depende de como ele construiu o modelo dele…
Vamos aguardar uma resposta para pode indicar algo mais coerente com a sua realidade…
Atenciosamente,
Éberson
j.silvestre
Eberson escrveu:
"Você tem uma thread e fica dando sleep de 500 milisegundos a cada ciclo do seu processo ou cria uma nova thread a cada 500 milisegundos? "
Na verdade eu estava usando um timer que gerava um evento a cada 500ms , então acho que se meu metodo de repente demorar mais de 500ms ele vai gerar outro evento
antes de terminado a primeira execução. A solução de criar uma thread com sleep de 500ms resolve meu problema.
publicvoidleBufferSerial(){atualizaBuffer=newTimer(500,newTimerHandler());atualizaBuffer.start();}privateclassTimerHandlerimplementsActionListener{// publicsynchronizedvoidactionPerformed(ActionEventactionEvent){privateclassTimerHandlerimplementsActionListener{// publicsynchronizedvoidactionPerformed(ActionEventactionEvent){// aqui vai o metodo que pode demorar mais de 500ms //...