有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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部分:实现一个类,该类可用于测量每次调用递增和递减方法所需的时间(在 毫秒)并打印出这些信息。该类应该或多或少透明地适应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。当我在调用“increment”后显示n之前的长值时,它们是相同的。为什么

假设我在应用程序中的很多地方都需要类似的东西(方法调用的时间)。一个想法是为所有不同的方法编写一个单独的计时器类。是否有人有其他优化的想法来更方便地获得计时


共 (3) 个答案

  1. # 1 楼答案

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

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

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

    祝你好运

  2. # 2 楼答案

    我认为你的作业是建议你利用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

  3. # 3 楼答案

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