看HDOJ系统、一些IDE都会带有计算程序的执行时间功能,其实很简单,调用System类中的currentTimeMills()方法,取得开始时间 和 结束时间,做个减法,就OK。
package zz.systemdemo;
public class SystemDemo {
public static void main(String []args){
// 取得循环程序前的系统时间
long startTime = System.currentTimeMillis();
int sum = 0; // 声明循环用到的累加结果变量
for (int i = 1; i < 30000000; i++) {
sum += i;
}
// 循环结束后的系统时间
long endTime = System.currentTimeMillis();
System.out.println("程序执行时间为:" + (endTime - startTime) + "毫秒");
}
}
- ->程序运行结果(在我机器上):
程序执行时间为:61毫秒
程序的结果是不稳定的,而且再次运行,时间会增长,不知道是为什么?可能是前面占用了内存,使机器速度有所减缓。网上查了下,好像还很有内容 ,要深入研究下。
另外注意:System类中的方法都是静态的。
想到以前在学单片机时候,老师说用 for() 循环来完成单片机的定时、延时效果是不理想的,这是有道理的。
今天看了下网易的博客,竟然奇迹般打开了(以前好像是很多大学都因为动态IP原因,网易服务器防止攻击而打不开博客),那叫一个鸡动;回顾下以前的知识,温故而知新。
用计时器控制跑马灯的两种方法
实现定时调度:
Timer类是一种线程设施可以用来实现在某一个时间或某一时间段后安排某一个任务执行一次或定期重复执行,该功能要与TimerTask打配合。其中TimerTask类用来实现由Timer安排的任务。
Timer类特点:每一个Timer对象对应一个线程,因此计时器所执行的任务应该迅速完成。否则,
package zz.timertaskdemo;
import java.util.TimerTask;
import java.util.Date;
import java.util.Timer;
import java.text.SimpleDateFormat;
class MyTask extends TimerTask{ // 任务调度类一定要继承TimerTask
public void run() {
SimpleDateFormat sdf = null;
sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss.SSS");
System.out.println("当前系统时间为:" + sdf.format(new Date()));
}
}
public class TimerTaskDemo{
public static void main(String []args){
Timer t = new Timer(); // 建立Timer类对象
MyTask mt = new MyTask(); // 定义任务
t.schedule(mt, 1000, 2000); // 设置(任务的执行,1秒后开始,每2秒重复)
//t.scheduleAtFixedRate(mt, 1000, 2000); // 设置(任务的执行,1秒后开始,每2秒重复)
}
}
在我机器上的运行结果:
1.用scheduleAtFixedRate()函数
t.scheduleAtFixedRate(mt, 1000, 2000); // 设置(任务的执行,1秒后开始,每2秒重复)
当前系统时间为:2012-07-22 21-08-05.996
当前系统时间为:2012-07-22 21-08-07.951
当前系统时间为:2012-07-22 21-08-09.951
当前系统时间为:2012-07-22 21-08-11.951
当前系统时间为:2012-07-22 21-08-13.951
当前系统时间为:2012-07-22 21-08-15.951
当前系统时间为:2012-07-22 21-08-17.951
当前系统时间为:2012-07-22 21-08-19.951
2.用schedule()函数
t.schedule(mt, 1000, 2000); // 设置(任务的执行,1秒后开始,每2秒重复)
当前系统时间为:2012-07-22 21-11-06.023
当前系统时间为:2012-07-22 21-11-07.977
当前系统时间为:2012-07-22 21-11-09.977
当前系统时间为:2012-07-22 21-11-11.977
当前系统时间为:2012-07-22 21-11-13.977
当前系统时间为:2012-07-22 21-11-15.977
当前系统时间为:2012-07-22 21-11-20.124
当前系统时间为:2012-07-22 21-11-22.124
当前系统时间为:2012-07-22 21-11-24.124
当前系统时间为:2012-07-22 21-11-26.124
当前系统时间为:2012-07-22 21-11-28.124
当前系统时间为:2012-07-22 21-11-31.665
当前系统时间为:2012-07-22 21-11-33.665
两个函数的区别:
schedule()方法的执行时间是固定的,如果之前出现延迟的情况,之后也会继续按照设定好的间隔来执行,死板的老顽固一个。
scheduleAtFixedRate()函数可以根据延迟调整下一次的间隔执行时间,更会灵活变通一下。