先写一个小程序,打印一句话"Moving",然后让主线程sleep10000毫秒以内的一个随机值
//Moveable接口
public interface Moveable {
public void move();
}
//Tank类
import java.util.Random;
public class Tank implements Moveable{
@Override
public void move() {
System.out.println("Tank Moving...");
try {
Thread.sleep(new Random().nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
下面记录一下Tank类执行的时间,用到System.currentTimeMills()方法
//Tank类
import java.util.Random;
public class Tank implements Moveable{
@Override
public void move() {
long start = System.currentTimeMillis();
System.out.println("Tank Moving...");
try {
Thread.sleep(new Random().nextInt(10000));
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("Time:" + (end - start));
}
}
实际上这还并不是达到要求的方法,要求的是记录整个Tank类中move方法的运行时间(很明显,这记录的只是move方法一部分的运行时间),要想记录很简单,设置一个代理,由这个代理访问Tank的move方法,然后在这个move方法的上下用System.currentTimeMilis()包裹。 设置代理又分两种方法,一种是通过继承,继承这个Tank类,然后调用move方法。另一种是通过实现Moveable接口,但是获得Tank类的对象,然后通过这个对象访问Tank的move方法 先说第一种方法
//Tank2继承Tank类
public class Tank2 extends Tank{
@Override
public void move() {
long start = System.currentTimeMillis();
super.move();
long end = System.currentTimeMillis();
System.out.println("Time:" + (end - start));
}
}
第二种方法
//Tank3实现Moveable接口
public class Tank3 implements Moveable{
Tank t;
Tank3(Tank t) {
super();
this.t = t;
}
@Override
public void move() {
long start = System.currentTimeMillis();
t.move();
long end = System.currentTimeMillis();
System.out.println("Time:" + (end - start));
}
}
上面第一种方法,叫继承,第二种方法,叫聚合