Threads avancados

3 respostas
R

Fala galera esperta. To com uma grande duvida aqui e queria saber se alguem tem alguma ideia a respeito.

O problema é meio complicado mas vou tentar explicar resumidamente.
Bom, criei um programa em java que acessa dois bancos diferentes para buscar dados alem de tratar varios arquivos txt ao mesmo tempo de acordo com as consultas, o problema é que uma dessas bases é crítica e nao queria fazer muitas consultas seguidas.

Minha solução era que, assim que terminar uma consulta, ele atribuia um valor a uma variavel qualquer onde a mesma seria verificada quando iniciasse outra consulta, se a mesma tiver ainda o valor definido no termino da consulta anterior ele nao fazia a busca.

Mas tudo isso seria controlado por um “timer”, onde quando ele terminasse a consulta e desse o valor a variavel, ele daria 5 segundos e voltava ao valor antigo da variavel. E se uma nova consulta fosse necessaria e esses 5 segundos ainda nao foram passados, ele iria ver que a variavel ainda ta mudada (entre os 5 seg) e tentaria a cada 1 seg novamente ate que a variavel volte ao outro valor (apos passar os 5 seg) ai sim realizaria a consulta, nunca deixando que o intervalo entre as consultas seja menor que 5 seg.

Só não esquecam que enquanto passam esses 5 seg, ele esta tratando arquivos ao mesmo tempo, então não basta colocar um simples sleep.

Se alguem tiver uma ideia e puder me ajudar agradeço. Caso não entendam o problema eu escrevo novamente de outra maneira.

Valeu Galera.

3 Respostas

cariocathi

Acho q um mutex resolveria seu problema.

louds

Acho q 1 software de caching também

dukejeffrie

Faz ao contrário, cara!! Enfila seus requests pra base crítica, e deixa uma Thread só cuidando disso. Faca com que essa thread nunca chame pop() na fila antes de passar seu intervalo, e pronto…

Assim vc usa menos threads, e nao precisa concorrer com a leitura de arquivos. Vc usa a thread de execucao pra controlar o tempo tb, do tipo (se nao passou 5 segundos, reschedule.

Acho que ainda dá pra fazer bem redondo usando a API de Timer, fazendo um TimerTask agendar o próximo, e cada TimerTask fazendo pop() e executando uma query.

boa sorte e []s!!

Criado 7 de janeiro de 2004
Ultima resposta 8 de jan. de 2004
Respostas 3
Participantes 4