Tempo Ocioso de uma thread

4 respostas
S

Olá, estou querendo calcular quanto tempo uma thread fica ociosa, ou seja, sem trabalho. Tenho a seguinte situação, tenho uma classe gerente que fica enviando trabalho para outras duas classes trabalhadoras, e gostaria de calcular quanto tempo, nem que seja em ms, essa trabalhadora fica sem fazer nada. alguem teria alguma ideia de como eu poderia fazer isso?

Abraço.

4 Respostas

gRoOve

Gostaria de saber isso também, será que há algum método da classe Thread que faça essa verificação?

S

Não sei se seria na própria thread. A classe trabalhadora possui um lista bloqueante e entao, enquanto nao cair nada nessa fila bloqueante a thread fica parada. Digamos que em tempo 1 o gerente envia trabalho para os trabalhadores aṕós os trabalhadores processarem o que precisam eles ficam idle até o gerente enviar uma nova tarefa eu preciso saber o tempo que esse trabalhador ficou sem trabalhar após acabar a tarefa 1 e receber a tarefa 2

iogui

spiderman,

Você vai ter que fazer este controle na unha pegando um timestamp de cada momento e subtraindo no final. Ou seja, quanda a thread trabalhadora startar, coloque um código dentro dela, antes de ela ficar em espera, que pegue o timestamp:

Date comecoTempoOcioso = new Date();

Faça a mesma coisa, assim que esta thread receber trabalho.

Date fimTempoOcioso = new Date();

Aí é só fazer calculo de tempo, tempoOcioso = fimTempoOcioso - comecoTempoOcioso.

Você pode ir fazendo isto e somar todo o tempo que ela ficou aciosa em algum momento no final da execução da aplicação.

[]s

iogui

Uma brincadeira legal seria, não parar a aplicação para verificar os tempos ociosos mas, criar um mecanismo para obter este tempo no momento em que você quiser, sem parar as threads trabalhadoras.
Ou seja, criar na sua thread mãe ou numa quarta thread especializada em medir os tempos, um método que obtém o tempo ocioso e imprime na tela.

Pra deixar a coisa ainda mais interessante, você poderia fazer isto com uma outra aplicação. Desta forma, além da thread mãe gerente e das duas trabalhadoras, você poderia startar uma terceira que ficasse escutando num socket. Aí era só montar um programinha a parte pra se conectar nesta thread e obter os tempos e imprimir na tela. Este programa poderia até estar rodando em outra máquina.

Ola aí que legal… aí sim ia ficar um brinquedo interessante! :wink:

Criado 27 de janeiro de 2011
Ultima resposta 27 de jan. de 2011
Respostas 4
Participantes 3