java - 我应该同步我的 "fake-time"类方法吗?

标签 java time synchronized

我正在为我的应用程序创建一个“假时间”或 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);
 }

所以我想请教一些建议,或者关于同步的知识,以及天气与否,我应该在我的方法中使用它。

最诚挚的问候 - 马丁。

最佳答案

我只会有一个线程更新时间,并在需要时使字段易失

我不会以可变的方式使用Date,我会使用long

关于java - 我应该同步我的 "fake-time"类方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604758/

相关文章:

Java,Long.parse 二进制字符串

html - 微数据的多个时间元素

java - 我如何比较 Java 中的原始时间?

java - Java 中同步的多线程安全性

java - 使用 Apache POI 在 Word 文档中添加水印

java - Jetty Websocket 服务器在本地工作,但远程连接失败并出现 "Host is down"错误,如何解决?

Javascript:在不涉及日期的情况下查找两个 'time' 字符串之间的时间差

java - 如何在缓存中同步文件创建(不写入文件,只是创建)

java - 跨类同步

Java Swing - 如何使用泛型在 Swing 组件上创建实用程序类