Trheads[resolvido]

4 respostas
j.silvestre

Pessoal

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 ?

sds

j.silvestre

4 Respostas

eberson_oliveira

Olá!

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

exemplo:

public void atualiza(double taxa) { synchronized (this) { double saldoAtualizado = this.saldo * (1 + taxa); this.saldo = saldoAtualizado; } }

espero ter ajuda !
abraços

eberson_oliveira

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

exemplo:

public void atualiza(double taxa) { synchronized (this) { double saldoAtualizado = this.saldo * (1 + taxa); this.saldo = saldoAtualizado; } }

espero ter ajuda !
abraços

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.

public void leBufferSerial(){
      atualizaBuffer = new Timer(500, new TimerHandler());
      atualizaBuffer.start();
     }


private class TimerHandler implements ActionListener{ // 

public synchronized void actionPerformed(ActionEvent actionEvent){

private class TimerHandler implements ActionListener{ // 

public synchronized void actionPerformed(ActionEvent actionEvent){

// aqui vai o metodo que pode demorar mais de 500ms //

...

sds

j.silvestre

Criado 12 de setembro de 2011
Ultima resposta 12 de set. de 2011
Respostas 4
Participantes 3