style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

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

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Pues: public void run(){  

Pues:

public void run(){
    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 de Threads

Saludos.

Imagen de ezamudio

Runnables

Otra razón por la que es mejor implementar un Runnable... así sin afectar tus procesos puedes usar una subclase de Thread así:

public class TimingThread extends Thread {
  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 llamar join() en el hilo que quieres esperar a que termine.

Imagen de GCORREAGEEK

Gracias por responder, pero ahora tengo esto

//Hilo

import java.util.ArrayList;
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();}
}

import java.util.List;

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

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">