Atualização de dados em um determinado intervalo de tempo em Java

Como posso atualizar dados em um intervalo utilizando Java …por exemplo o programa vai fazer uma leitura e vai armazenar em X, passados os 60 segundos ele faz uma nova leitura e armazena em Y… e por ai vai

Com uma Thread, pesquise por Thread e Runnable em Java.

Tens algum exemplo de como fazer ?

import java.util.Timer;
import java.util.TimerTask;

public class Exemplo {

	public static void main(String[] args) {
		Exemplo programa = new Exemplo();
		programa.executar();
	}

	private void executar() {
		TimerTask tarefaRepetitiva = new TimerTask() {

			@Override
			public void run() {
				atualizarDados();
			}
		};
		long intervalo = 60000;
		Timer timer = new Timer();
		timer.schedule(tarefaRepetitiva, intervalo);
	}

	private void atualizarDados() {
		// aqui você implementa a sua atualização dos dados
	}
}
3 curtidas

Tentei fazer isso mas ele me joga a seguinte exceção:

Exception in thread “main” java.lang.NumberFormatException: For input string: "4071131613"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at com.G2.SNMP.client.SNMPManager.totalBytesXY(SNMPManager.java:250)
at com.G2.SNMP.client.SNMPManager.main(SNMPManager.java:62)

O código do @staroski não causaria isso, essa exception é porque você tentou - em alguma parte do seu código - converter para Int a string “4071131613” e deu errado.

Integer.parseInt("4071131613"); gera esse erro, mas Long.parseLong("4071131613"); não gera, o que significa que “4071131613” deve ser um número maior do que cabe em um int: Integer.MAX_VALUE retorna 2147483647

2 curtidas

O problema ocorre aí, vai lá e concerta, seja usando long ou BigInteger, ou mudando a lógica pros valores não serem tão grandes

Estou trabalhando em uma aplicação SNMP e preciso calcular o total de bytes recebidos e enviados em um intervalo de tempo entre x e y numa interface de rede.

total de bytes = (ifInOctets_y - ifInOctets_x) + (ifOutOctets_y - ifOutOctets_x)

Sendo assim o programa vai fazer uma leitura e vai armazenar em X, passados os 60 segundos ele faz uma nova leitura e armazena em Y. Porem não estou conseguindo obter o valor nesse intervalo de tempo

Alguém pode me ajudar com algum exemplo ?

Não tenho conhecimento sobre isso aí não, mas acho melhor te deixar consciente de algumas coisas:

  • Não vejo como você conseguiria fazer o intervalo de “60 segundos” ser exato, porque Threads não garantem isso (você manda uma Thread dormir 60s e quando acordar realizar a tarefa, mas, ela provavelmente irá acordar um pouco depois dos 60s [depende do Agendador da JVM chamar ela, acho até que depende do Sistema Operacional])
  • Você pode medir a passem de tempo com uma boa precisão usando System.nanoTime(); Isso te permitiria saber quanto tempo se passou desde a última leitura com uma boa precisão;
  • “x” e “y” são instantes de tempo? Esse me parece um nome nada sugestivo pra isso. Pra mim X e Y se encaixam bem em coordenadas no Plano Cartesiano ou em 3D. Que tal nomes como “instanteInicial” e “instanteFinal”?

Talvez o código possa ser mais ou menos assim:

while (isContinuarVerificando) {
    verificar(); //É executado a cada 60s (aproximadamente, o intervalo será >=60s)
    Thread.sleep(60000); //Isso precisa ser colocado em try/catch, ou relance a Exception
}