在java中使用new Date()获取时间的奇怪行为



我们在服务器中记录一些事件,我们得到每个事件的当前时间,实例化一个新的Date对象。像这个new Date()

但是昨天出了问题。记录器显示该条目记录在2012-01-21 14:06:04,但该事件与new Date()的时间不同,该时间为:2012-01-21 13:06:04

差一个小时

尽管如此,其他事件在这个bug事件前后都得到了正确的时间。

奖金

我们使用以下格式化程序记录事件:

// Of course, this means that we read our buggy timestamp like: '120121130604'
// but that's irrelevant :p
public static SimpleDateFormat messageDateTimeFormatter = new SimpleDateFormat("yyMMddHHmmss");

有什么想法吗?

假设SimpleDateFormat是一个公共静态字段,我猜多个线程正在同时使用它。但是SimpleDateFormat不是线程安全的:

日期格式不同步。建议创建每个线程的单独格式实例。如果多个线程访问一个格式,它必须在外部同步。

同步其使用,或将其存储在ThreadLocal变量中,或每次创建一个新实例。

您得到的可能是由于并发使用SimpleDateFormat而导致的某些竞争条件或其他与线程相关的错误。

相关内容

  • 没有找到相关文章

最新更新