2016-12-11 4 views
0

hey j'avoir cette fonction dans mon code:obtenir combien de secondes ce fil couru

public synchronized void finished() 
{ 
    howManyDone++; 
    log.append("Finished creating board "+this.howManyDone+"\n"); 
    if(howManyDone == boards.length) 
     JOptionPane.showMessageDialog(log, "All Boards Were Created.","Attention",JOptionPane.WARNING_MESSAGE); 
} 

je veux ajouter à la commande log.append comment fil beaucoup de evrey a couru en sec. j'ai essayé de faire celui-ci:

public synchronized void finished() 
{ 
    long start = System.nanoTime(); 
    howManyDone++; 
    long end = System.nanoTime(); 
    long estTime = end - start; 
    double seconds = (double)estTime/1000000000; 
} 

et que les imprimer secondes à chaque fois comme ceci:

log.append("Finished creating board " +this.howManyDone+ " in "+seconds+"\n"); 

mais les chiffres que je reçois dans le journal que les secondes apparaît comme: 6.00E -7 et ainsi de suite ... qu'est-ce que je fais mal?

grâce

+2

Vous ne synchronisez que le nombre de secondes pendant lequel s'exécute la fonction terminée, pas les threads. –

Répondre

0

Il ne sera pas possible d'obtenir le temps total d'exécution, sauf si vous étiez en mesure de noter l'heure du système lorsque le fil a commencé travail. Il ne suffit pas de l'appeler au début de la fonction terminée.

Pour une solution, vous pouvez créer une sous-classe Thread qui garde la trace de combien de temps il fonctionne, comme tel:

public class TimedThread extends Thread { 

    private long startTime; 
    private long endTime; 

    public TimedThread(Runnable r) { 
     super(r); 
    } 

    @Override 
    public void run() { 
     startTime = System.nanoTime(); 
     super.run(); 
     endTime = System.nanoTime(); 
    } 

    public long getRunDuration() { 
     return endTime - startTime; 
    } 
} 

Utilisez ensuite TimedThread s au lieu de Threads où vous avez besoin d'un calcul de synchronisation (en supposant que vous hae contrôle sur cette section de code).