Ajuda com temporizador (threads, InterruptedException)

Olá,

Estou fazendo um sistema que deve possuir um mecanismo de timeout. O sistema tem um conjunto de “fornecedores de imagens”, e se esses fornecedores ficarem inativos por um período de tempo X (em geral, uma ou duas horas), eles devem ser desligados.

Pensei em fazer o seguinte:

  1. Cada fornecedor de imagens tem um método que retorna a quantidade de tempo em que ele está inativo;

  2. O sistema tem um controlador, e coloquei no controlador um método para verificar o tempo de inatividade de cada fornecedor e, se o tempo for maior que o limite, remover o fornecedor;

  3. Preciso de um temporizador para ativar o método de 2) num intervalo fixo - por exemplo, a cada 10 ou 15 min.

Eu não conheço muito sobre threads, e por isso estou pedindo a ajuda de quem souber fazer isso. Eu tentei fazer da seguinte maneira:

  1. criei uma classe VerificadorTimeout, que transcrevo a seguir:
public class VerificadorTimeout implements Runnable {

	//intervalo entre as checagens (valor inicial 10 min)
	private volatile int INTERVALO = 10 * 60 * 1000;
	
	@Override
	public void run() {

		while (true) {
			
			try {
				pause(); 
				verificar();
			
			} catch (ExcecaoLucca el) {
				System.out.println("Verificacao de timeout de fornecedores " + 
				"nao foi bem sucedida! " + el.getMessage()); 
				el.printStackTrace(System.out); 
			
			} catch (InterruptedException ie) {
				System.out.println("Verificador de timeout de fornecedores " + 
							"de imagens interrompido! " + ie.getMessage()); 
				ie.printStackTrace(System.out);
			}
			
			
		}
	}
	
	public synchronized void pause() throws InterruptedException {
		this.wait(INTERVALO); 
	}
	
	public synchronized void verificar() throws ExcecaoLucca {
		Lucca.getLucca().verificarFornecedoresInativos(); 
	}

}
  1. Tem um servlet que dá acesso ao sistema (a interface do sistema é muito pequena, e controlada apenas por esse servlet). Nele, criei uma variável de classe com o nome “verificador”. No método init() inicializei a variável e a thread():
		verificador = new VerificadorTimeout(); 
		new Thread(verificador).start();
  1. No método destroy(), anulei a variável “verificador”:
		verificador = null;

Bem, a minha pergunta é a seguinte: como não tenho muito conhecimento de threads, pergunto se a classe VerificadorTimeout acima está consistente, e se pode funcionar sem erros aparentes. O que mais me deixa inseguro é a exceção InterruptedException, pois não sei em que condições ela será lançada e o que fazer em resposta. Na verdade, sei que estou ignorando as duas exceções, mas com relação a essa InterruptedException, não sei se estou procedendo corretamente. Pergunto, de modo geral, se a solução que descrevi é consistente e sem erros aparentes. Se houver outra forma, melhor, de fazer a mesma coisa, peço que me indiquem.

Obrigado por qualquer ajuda,

Hel_all

Dá uma pesquisada sobre Timer e TimerTask… se eu entendi bem o seu problema deve ajudar. :lol:

Obrigado, pf_poa, era isso mesmo que eu precisava!