AEM CQ - System.currentTimeMillis()返回重复的结果

时间:2014-12-11 16:17:14

标签: java timer system cq5 java.util.concurrent

我正在开发一个AEM项目,我有一个组件X.沿着这个组件,我有另一个是X的容器。所以,我可以拖动X实例并将它们放到容器上。

为了避免组件X的多个实例之间出现问题,我为它们分配了一个id,从关于X.jsp调用这个Java函数:

long id = System.currentTimeMillis();

然后,在jsp中,我有类似的东西:

<div id='<%= id %>'>
</div>

令我惊讶的是,在使用Chrome Inspector检查DOM时,我在html结构中发现了几个重复的ID。当然,这引起了很多问题。

我能够通过调用:

来解决这个问题
long id = System.nanoTime();

我是否疯了,currentTimeMillis正在返回重复值?这可能吗?

1 个答案:

答案 0 :(得分:3)

  

这可能吗?

绝对。首先,计算机很可能在一毫秒内完成多项工作。第二件事,这里咨询的时钟通常不会有毫秒的粒度 - 你可能会发现它会在一段时间内得到相同的结果,然后跳跃10毫秒或15毫秒。

您绝对应该使用currentTimeMillis获取唯一ID。说实话,我也不建议使用nanoTime。为什么不使用UUID?这就是它的用途。