CAT | java
最近老切换机器,但像Eclipse这样的工具还是必须用到,但是每次新建一个java文件,文件头自动生成带有 @author 的注释。
不过问题是那个 @author 是按照系统用户来的。虽然SVN提交代码的时候有准确的用户名,但是文件里面那个不是每次都记得要修改。
以前是通过修改新建的文件模板来达到效果的。
模板里面是 @author ${user},里面 ${user} 是一个系统变量,可以通过下面的语句拿到。
System.getProperty("user.name")
修改这个值可以通过
/path/to/eclipse -vmargs -Duser.name="My Name"
或者
修改eclipse.ini
...... -vmargs -Dosgi.requiredJavaVersion=1.5 -Duser.name=leegorous ......
重新启动 Eclipse 就起效了。
这个任务是要求每秒触发一次。
一开始我尝试用 Timer 的 scheduleAtFixedRate,通过简单的测试,发现它会慢慢地累积形成时间差。
虽然这里不要求非常的精确,但是如果只是在某点附近徘徊,不会发生累积的,听起来是不是会好一点呢?
于是就诞生了下面的代码。
while (true) {
try {
long i = 1000 - System.currentTimeMillis() % 1000;
if (i > 100) {
Thread.sleep(i);
} else {
Thread.sleep(1000 + i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(System.currentTimeMillis());
}
这里定的那个参照点就是每秒的零毫秒,先获取当前毫秒数,计算出到下一秒之间的毫秒数。
接下来的比较很重要,如果希望每秒只执行一次的话,这个是必须的,因为 java 的 sleep 真的不太可靠(这也是为什么需要和100毫秒做比较),实际执行时那是一个震荡状态,把 else 去掉之后会出现意想不到的现象。
通过打印结果,可以看出基本符合我的要求了,行啦。
问题是如果想要更加精确一点,要怎么做呢?
