opa, gostaria de saber se tem como eu pegar apenas o tempo em que o meu programa esteve em execução no Sistema Operacional, sem contar as interrupções que o mesmo gera…Em outras palavras quero o tempo real que ele demora pra rodar sem nenhuma interferencia.
estou usando a chamada: System.currentTimeMillis() , eu faço uma no inicio do programa e uma no fim e daí subtraio os tempos obtidos, porém ela não serve para tal aplicação, prq eu preciso saber o tempo o mais proximo do exato possivel que é para efetuar uma comparação entre algoritmos…nao sei se ficou clara minha duvida aí, mas quem pude ajudar, por favor me ajude…heheeheh…
Não sei se o uso de Threads poderia otimizar um pouco o seu problema.
Caso queira dar uma olhada tem u m tutorial ótimo feito pelo Jeveaux aqui no portal.
Dê uma conferida, ou melhor, procure comandos de interrupção do sistema em Java. Essas interrupções forçarão o seu pc a rodar sem nenhuma interrupção o seu código. Mas preste atenção quando for usá-la, pois se no fim do seu programa vc não habilitar elas corretamente, a única solução vai ser religar o pc…
Espero ter ajudado…
Falow!
Se você estiver usando o Java 5.0, você pode usar ThreadMXBean. Veja o exemplo abaixo para saber quanto tempo de CPU foi gasto em uma determinada thread.
import java.lang.management.*;
class DoNothing {
public DoNothing () {
}
public void doNothing(int x) {
x = x;
}
}
class SimpleThread implements Runnable {
int iterations;
public SimpleThread (int pIterations) {
iterations = pIterations;
}
static ThreadMXBean tmb = ManagementFactory.getThreadMXBean();
public void run() {
DoNothing dn = new DoNothing();
System .out .printf ("Thread %d started.%n", iterations);
long t0 = tmb.getCurrentThreadUserTime();
for (int i = 0; i < iterations; ++i) {
for (int j = 0; j < 10000000; ++j) {
dn.doNothing(j);
}
}
t0 = tmb.getCurrentThreadUserTime() - t0;
System .out .printf ("Thread %d stopped. Took %d USER CPU ms %n", iterations, t0 / 1000000);
}
}
class TestThreadTiming {
public static void main(String[] args) {
int nThreads = 6;
Thread[] thr = new Thread [nThreads];
for (int i = 0; i < nThreads; ++i) {
thr[i] = new Thread(new SimpleThread(i + 1));
}
for (int i = 0; i < nThreads; ++i) {
thr[i].start();
}
for (int i = 0; i < nThreads; ++i) {
try {thr[i].join();} catch (InterruptedException ex) {ex.printStackTrace();}
}
System .out .println ("All threads stopped. Exiting...");
}
}