2015-01-18 3 views
-2

Мне нужно вычислить время простоя объекта, скажем, у меня есть pojo, из которого объект создается в каком-то другом классе, показанном ниже, и в этом классе я создал объект, но имею не использовали его, но спустя какое-то, как я решаю знать время простоя этого объекта, пожалуйста, посоветуйте, как я могу рассчитать время простоя этого объекта ..узнать время простоя объекта

позволяет сказать, ниже мой POJO

public class Emp implements Comparable { 

    String name, job; 
    int salary; 

    public Emp(String n, String j, int s) { 
     this.name = n; 
     this.job = j; 
     this.salary = s; 

    } 

    public int hashcode() { 
     return name.hashCode() + job.hashCode() + salary; 
    } 

    public boolean equals(Object o) { 

     Emp e1 = (Emp) o; 
     return this.name.equals(e1.name) && this.job.equals(e1.job) && this.salary == e1.salary; 
    } 


    // method have return type 
    public int compareTo(Object o) { 
     Emp e1 = (Emp) o; 
     return this.name.compareTo(e1.name);//compareToIgnoreCase 
    } 




    public void display() 
    { 
     System.out.println(name+"\t"+job+"\t"+salary); 
    } 

} 

прямо сейчас скажем, существует еще один класс

class Abc 
{ 

public static void main(String args[]) 
{ 

Emp e1 = new Emp();//created e1 object but not use it later on decided to find out its idle time 

} 
} 
+0

Вы хотите узнать, сколько времени прошло с тех пор, как был вызван какой-то метод в вашем классе? Для чего? – Gabe

+0

Да, я хочу записать время, когда я создал e1 и позже в любой момент времени, когда я wan, чтобы минус текущее время со временем его создания. – user2288721

+0

Хорошо, но почему? Я хочу убедиться, что вы задаете правильный вопрос. – Gabe

ответ

2

Без использования инструментов профилирования запишите время создания объекта в конструкторе объекта и отслеживайте время выполнения методов (например, сохраняя глобальный таймер выполнения внутри объекта и агрегируя время выполнения каждый раз, когда метод завершается).

Затем время простоя объекта (текущее время - время создания объекта - общее время выполнения для всех методов). Например:

import java.util.concurrent.atomic.AtomicLong; 

public class Emp implements Comparable { 

    String name, job; 
    int salary; 
    private AtomicLong busyTime; 
    private long instantiationTime; 

    public Emp(String n, String j, int s) { 
     instantiationTime = System.nanoTime(); 
     this.name = n; 
     this.job = j; 
     this.salary = s; 
    } 

    public int hashcode() { 
     long startTime = System.nanoTime(); 
     int returnValue = name.hashCode() + job.hashCode() + salary; 
     busyTime.addAndGet(System.nanoTime() - startTime); 
     return returnValue; 
    } 

    public boolean equals(Object o) { 
     long startTime = System.nanoTime(); 
     Emp e1 = (Emp) o; 
     boolean returnValue = this.name.equals(e1.name) 
       && this.job.equals(e1.job) && this.salary == e1.salary; 
     busyTime.addAndGet(System.nanoTime() - startTime); 
     return returnValue; 
    } 

    // method have return type 
    public int compareTo(Object o) { 
     long startTime = System.nanoTime(); 
     Emp e1 = (Emp) o; 
     int returnValue = this.name.compareTo(e1.name); 
     busyTime.addAndGet(System.nanoTime() - startTime); 
     return returnValue;// compareToIgnoreCase 
    } 

    public void display() { 
     long startTime = System.nanoTime(); 
     System.out.println(name + "\t" + job + "\t" + salary); 
     busyTime.addAndGet(System.nanoTime() - startTime); 
    } 

    public long getIdleTime() { 
     return System.nanoTime() - instantiationTime - busyTime.get(); 
    } 
} 
+1

Важно, чтобы использовать 'System.nanoTime()' для этого, поскольку это его предназначение. – Gabe

+0

@Nick Большое спасибо, вы также можете показать в коде также, как добиться этих вещей, которые помогут подробнее прояснить – user2288721

+0

@gabe - пару лет назад я читал о том, что System.nanoTime() разбивается на многоядерные системы. Это правда? – Marichyasana

Смежные вопросы