Leegorous | 我的梦想飞行器

CAT | java

Dec/09

17

修改eclipse ${user}变量的值

最近老切换机器,但像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 就起效了。

Nov/09

19

Java定时器

这个任务是要求每秒触发一次。

一开始我尝试用 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 去掉之后会出现意想不到的现象。

通过打印结果,可以看出基本符合我的要求了,行啦。

问题是如果想要更加精确一点,要怎么做呢?

Theme Design by devolux.nh2.me