Como medir el tiempo de ejecucion de un hilo
Saludos..
Nesecito medir el tiempo de ejecucion de mi hilo.
He buscando en internet y me dicen que con esto.Pero el hilo se ejecuta siempre aparte y no logro saber como puedo hacer para ver cuanto se demora.
package medirtiempo;
/*@author sebas */
public class Main extends Threads
{
public Main(){
}
public static void main(String[] args)
{
long tiempoInicio = System.currentTimeMillis();
Main obj = new Main();
obj.start();
long totalTiempo = System.currentTimeMillis() - tiempoInicio;
System.out.println("El tiempo de demora es :" + totalTiempo + " miliseg");
}
static void ejecutaProceso1()
{
//Logica
}
public void run(){
ejecutaProceso1();
}
}
Bueno es obvio que asi no se mide el tiempo de ejecucion de un hilo.
Porque lo que hace la Clase es apenas se ejecuta el hilo se ejecuta el Syso.
Bueno alguna ayuda!
Gracias
- Inicie sesión o regístrese para enviar comentarios
Pues: public void run(){
Pues:
long s = System.currentTimeMillis();
ejecutaProceso1();
System.out.println( "Tiempo: " + System.currentTimeMIllis() - s + " ms. " );
}
Notas, dale formato a tu código al postear, es terrible leer código sin formato, enciarralo en <code> .
No heredes de
Thread
mucho menos deThreads
Saludos.
Runnables
Otra razón por la que es mejor implementar un Runnable... así sin afectar tus procesos puedes usar una subclase de Thread así:
private long t0;
private long t1;
public void run() {
t0 = System.currentTimeMillis();
try {
super.run();
} finally {
t1 = System.currentTimeMillis();
}
}
public long getRunningTime() { return t1-t0; }
}
Y entonces puedes medir tus tareas simplemente corriéndolas con
new Thread(new MiPropioRunnable()).start()
y posteriormente preguntarle al hilo (al que debiste haber guardado la referencia)hilo.getRunningTime()
.El código que pusiste no sirve porque el método
start()
regresa el control al hilo que lo invoca casi de inmediato, por lo que te va a dar un tiempo muy corto, porque realmente lo que mediste es cuánto tiempo se tardó la invocación a start. En todo caso si es una sola tarea, necesitar llamarjoin()
en el hilo que quieres esperar a que termine.Gracias por responder, pero ahora tengo esto
//Hilo
import java.util.List;
public class Hilo implements Runnable{
Thread hilo;
public Hilo(){
hilo=new Thread(Hilo.this);
}
public static void main(String[] args) {
Hilo obj = new Hilo();
obj.start();
}
public List<List<String>> llenaArray(){
List<List<String>> lst= new ArrayList<List<String>>();
for (int i = 0; i < 3; i++) {
List<String> list = new ArrayList<String>();
for (int y = 0; y < 10; y++) {
String str="Ejecuta Proceso Pesado+"+i+","+y+"!!";
list.add(str);
}
lst.add(list);
}
return lst;
}
public void ejecutaProceso1(){
List<List<String>> lst=llenaArray();
Hilo2 hi=null;
for (List<String> list : lst) {
hi = new Hilo2(list);
hi.start();}
}
public void run(){
long tiempoInicio = System.currentTimeMillis();
ejecutaProceso1();
long totalTiempo = System.currentTimeMillis() - tiempoInicio;
System.out.println("El tiempo de demora 1 es :" + totalTiempo + " miliseg");
}
public void start(){this.hilo.start();}
}
public class Hilo2 implements Runnable {
Thread hilo;
List<String> lista;
public Hilo2(List<String> lista) {
hilo = new Thread(Hilo2.this);
this.lista = lista;
}
public void ejecutaProceso1() {
List<String> lst = lista;
for (String cadena : lst) {
System.out.println(cadena);
}
}
public void run() {
ejecutaProceso1();
}
public void start() {
this.hilo.start();
}
}
Bueno, al ejecutar esto tengo algo como esto:
Ejecuta Proceso Pesado+0,0!!
Ejecuta Proceso Pesado+0,1!!
.
.
Ejecuta Proceso Pesado+0,35!!
El tiempo de demora 1 es :0 miliseg
Ejecuta Proceso Pesado+0,36!!
.
.
Ejecuta Proceso Pesado+2,98!!
Ejecuta Proceso Pesado+2,99!!
Osea me imprime desordenadamente.Pero eso no me importa lo que me importa
es que me salga cuanto demoro en ejecutarse la aplicacion y como ven me sale por el medio el resultado y no se ejecuta
al ultimo como estaba buscando.
Como se habran dado cuenta es un hilo dentro de otro hilo.
Muchas Gracias