我为我的应用程序创建了一个“假时间”或 TimeSource,关键是这个新类应该控制应用程序的实际时间。这意味着所有使用 Date() 构造函数、System.currentTimeInMillis() 或 Calendar.getInstance() 的方法都应该使用我的类(例如 TimeSource.getInstance.getCurrentTimeInMillis())。
这样我可以在测试环境中操纵系统的实际时间。
但我想知道我是否应该同步这些方法,或者我应该如何同步。
我可以向您展示以下代码:
public class DateTime {
private static final long ONE_MINUTE = 60 * 1000;
private static final long ONE_HOUR = ONE_MINUTE * 60;
private static final long ONE_DAY = ONE_HOUR * 24;
private static final long ONE_MONTH = ONE_DAY * 30;
private static final long ONE_YEAR = ONE_DAY * 364;
private static DateTime instance;
private Date date;
private Date staticDate;
private boolean isStatic = false;
private long addedTimeInMilliseconds = 0;
public static DateTime getInstance() {
if (instance == null) {
instance = new DateTime();
}
return instance;
}
private DateTime() {
date = new Date(System.currentTimeMillis());
staticDate = new Date(System.currentTimeMillis());
}
public Date getCurrentTime() {
if (isStatic) {
return staticDate;
} else {
date.setTime(System.currentTimeMillis()+this.addedTimeInMilliseconds);
return date;
}
}
public long getCurrentTimeInMillis() {
if (isStatic) {
return staticDate.getTime();
} else {
return System.currentTimeMillis()+this.addedTimeInMilliseconds;
}
}
}
我已经对这些方法进行了一些测试——单线程和多线程测试——并且同步方法的性能比没有同步的要差很多。问题是我不确定如果我不同步这些方法将来是否会出现问题。
我还使用了一些方法来添加“当前应用程序的时间”
public void addMinutesToDateTime(int minutes) {
this.addedTimeInMilliseconds += (minutes * ONE_MINUTE);
}
所以我问了一点建议,或者关于同步的知识,以及天气与否,我应该在我的方法中使用它。
最好的问候 - 马丁。