定时器代码不起作用

时间:2010-12-12 11:27:52

标签: java

计时器Java代码不起作用

public interface IncDec
{
 void increment();
 void decrement();
}
public class MyIncDec implements IncDec
{
 private int x;
 public MyIncDec(int x) {
  this.x = x;
}
 public void increment() {
  this.x++;
 }
 public void decrement() {
  this.x--;
 }
}

第1部分:实现一个类,该类可用于测量每次调用增量和减量方法所需的时间(in 毫秒)并打印出这些信息。该类应该或多或少地透明地与IncDec接口的现有客户端相匹配。

我的解决方案:

public class Test{
public static void main(String[] args){
MyIncDec mid = new MyIncDec(4);
long l1;
long l2;

l1 = Calendar.getInstance().getTimeInMillis();
mid.increment();
l2 = Calendar.getInstance().getTimeInMillis();
System.out.println(l2-l1);
}
}

我的解决方案给我时间差异为0.当我在调用'增量'后显示n之前的长值时,它们是相同的。为什么这样?

假设我不得不为应用程序中的许多地方做类似的事情(方法调用的时间)。一个想法是为所有不同的方法编写一个单独的计时器类。有没有人有另一个优化的想法来更方便地获得计时?

3 个答案:

答案 0 :(得分:1)

首先,你的时间差为0,因为运行时间可能不到1毫秒。尝试在Thread.sleep(50)方法中添加increment,看看是否有变化。

 public void increment() {
  try { Thread.sleep(50); } catch (InterruptedException e) { }
  this.x++;
 }

其次,你的家庭作业可能希望你在课堂​​上使用IncDec界面计算你的时间。所以考虑到这一点。了解界面是什么,它们用于什么,更重要的是,如何使用

祝你好运!

答案 1 :(得分:1)

我认为你的作业建议你使用Proxy Pattern

我不打算给你完整的解决方案,但这里有一个提示:

public class MyIncDecProxy implements IncDec{

    MyIncDec incDec;

    public MyIncDecProxy(int x){
        //Initialise incDec
    }

    public void increment() {
        // Wrap the method of incDec implementing your timer
    }

    public void decrement() {
        //ditto
    }

}

然后,您将使用MyIncDecProxy类而不是MyIncDec

答案 2 :(得分:-1)

  1. 我相信您的代码有效。你必须要感谢现代计算机:它们非常快。如果您希望看到差异写入循环0..1000000而不是mid.increment()的单个调用。或者是以纳秒为单位的测量时间。
  2. 如果它不是练习但真正的任务使用java profiler。有很多免费和商业的个人资料。此工具将为您提供最佳信息。