Olá pessoal,
Estou fazendo um estudo de complexidade de algoritimos.
Estou querendo saber como faço para ligar um relógio e desligá-lo assim que a função acabar seu trabalho.
Em C, faço assim, eu já testei e está funcionando, agora em Java estou me enrolando um pouco:
Se milissegundos não são suficientes para você, e se você está usando o Java 5.0, você pode usar System.nanoTime().
Desvantagens -
a) Embora System.nanoTime lhe retorne um valor em nanossegundos (bilionésimos de segundos!), na prática o valor cronometrado depende do hardware e do sistema operacional (que normalmente não consegue medir um tempo inferior a 1 ms). OK, ok, eu sei que o Pentium III e IV conseguem medir um tempo que é 1 clock (ou seja, para um Pentium IV 3.8 GHz isso seria 0,2632 ns) mas não sei se o sistema operacional acessa esse contador do Pentium III e IV.
b) Se com System.currentTimeMillis você tem de repetir o seu teste várias vezes e tirar uma média, porque por vários motivos (JIT compilation, garbage collection, memory swapping, disk caching, deoptimization etc) o tempo nunca se repete, imagine com System.nanoTime.
Lipe, olhei essa classe e me veio uma dúvida enorme.
Lá fala que o método não é thread-safe, ate ai tudo bem. Mas o método não ser reentrante, ai fiquei bolado.
Desde quando java tem problemas de reentrancia para métodos que não chamam outros diretamente? Ou alguem seria estúpido o suficiente para usar JNI em um signal handler?
Eu estou usando o Java 1.5
Mas com o System.nanoTime() eu consigo numa boa e consigo ter essa precisão, embora, dependa do hardware, entre outros. Pois maior precisão seria se eu só tivesse rodando apenas esse processo.