命令设计模式
示例:求指定代码的执行时间
public static void main(String[] args) {
long start = System.currentTimeMillis();
for(int i=0;i<99999;i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("*** "+(end-start));
}
示例:求任意一段代码的执行时间
- 工具类:
public abstract class ExecTime {
public abstract void fun();
public long exec() {
long start = System.currentTimeMillis();
fun();
long end = System.currentTimeMillis();
return end - start;
}
}
- 测试代码:
测试一:
public static void main(String[] args) {
class ForExecTime extends ExecTime{//内部类
@Override
public void fun() {
for(int i=0;i<99999;i++) {
System.out.println(i);
}
}
}
ForExecTime obj = new ForExecTime();
long res = obj.exec();
System.out.println(res);
}
测试二:
public static void main(String[] args) {
ExecTime obj = new ExecTime() {//匿名内部类
@Override
public void fun() {
for(int i=0;i<99999;i++) {
System.out.println(i);
}
}
};
long res = obj.exec();
System.out.println(res);
}
测试三:
public static void main(String[] args) {
long res = new ExecTime() {
@Override
public void fun() {
for(int i=0;i<99999;i++) {
System.out.println(i);
}
}
}.exec();
System.out.println(res);
}
测试四:Lambda写法
public class DemoTest {
public static long execTime(Supplier<Long> supplier) {
return supplier.get();
}
public static void main(String[] args) {
//Lambda表达式相当于匿名内部类的简写
long res = execTime(() -> {
long start = System.nanoTime();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
long end = System.nanoTime();
return end - start;
});
System.out.println(res);
}
}