在Java中,获取系统时间的最快方法是什么?
我正在开发一个经常使用系统时间的系统,因为在Java中,获取系统时间的最快方法是什么?,java,time,calendar,Java,Time,Calendar,我正在开发一个经常使用系统时间的系统,因为延迟了接口 从系统中获取时间的快速方式是什么 目前,每当我需要获取时间时,我都在使用Calendar.getInstance().getTimeInMillis(),但我不知道是否有更快的方法。 “以毫秒为单位返回当前时间”。 使用此项获取实际系统时间。 . “返回的值表示自某个固定但任意的起始时间起的纳秒数” 使用此选项可以测量时间间隔/事件。System.currentTimeMillis() System.currentTimeMillis 是
延迟了接口
从系统中获取时间的快速方式是什么
目前,每当我需要获取时间时,我都在使用Calendar.getInstance().getTimeInMillis()
,但我不知道是否有更快的方法。“以毫秒为单位返回当前时间”。
使用此项获取实际系统时间。 .
“返回的值表示自某个固定但任意的起始时间起的纳秒数”
使用此选项可以测量时间间隔/事件。
System.currentTimeMillis()
System.currentTimeMillis
是简单的答案
long-timeMilliSec=System.currentTimeMillis()代码>对于较大的请求数量,我认为应该有一个线程负责更新当前系统时间,避免每个线程独立执行。简而言之,system.currentTimeMillis()
更快
@Test
public void testSystemCurrentTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
System.currentTimeMillis();
}
stopwatch.stop();
System.out.println("System.currentTimeMillis(): " + stopwatch);
}
@Test
public void testDateTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
(new Date()).getTime();
}
stopwatch.stop();
System.out.println("(new Date()).getTime(): " + stopwatch);
}
@Test
public void testCalendarTime() {
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++) {
Calendar.getInstance().getTimeInMillis();
}
stopwatch.stop();
System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch);
}
我希望,这将对您有所帮助。系统。根据下面的测试用例,currentTimeMillis()
是最快的
public class ClassTest
{
@Test
public void testSystemCurrentTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
System.currentTimeMillis();
}
stopwatch.stop();
System.out.println("System.currentTimeMillis(): " + stopwatch);
}
@Test
public void testDateTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
(new Date()).getTime();
}
stopwatch.stop();
System.out.println("(new Date()).getTime(): " + stopwatch);
}
@Test
public void testCalendarTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Calendar.getInstance().getTimeInMillis();
}
stopwatch.stop();
System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch);
}
@Test
public void testInstantNow()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Instant.now();
}
stopwatch.stop();
System.out.println("Instant.now(): " + stopwatch);
}
}
但是
Instant.now()
快速且简单,并提供其他实用程序,如Instant.now().getEpochSecond()代码>,Instant.now().getNano()
,Instant.now().compareTo(otherInstant)
和更多。在DelayQueue中,时间毫秒在哪里使用?我不清楚,我只在实现getDelay()
方法中延迟接口的类中使用。@Renato、Calendar.getInstance()和new Date()都使用System.currentTimeMillis()然而,Calendar是最慢的。请注意,这两种方法有不同的特点,您应该选择适合您需要的方法。据我所知,DelayQueue使用时间单位。纳秒用于计算时间,因此可能System.nanoTime()
在这种情况下更合适,以避免必须转换为getDelay()方法中的单位。您可以使用那里的任何单位,因此两者都可以工作。nanoTime更精确是否有人运行任何基准测试或有一些分析证据表明System.currentTimeMillis()比Calendar.getInstance()快。getTimeInMillis()?即使不是,也不应该创建新实例来获取millis,当你能从系统中得到它们时:)是的,但我见过的所有操作系统都倾向于为你这样做。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-对于99.9%的目的,这是推荐的方法。严格来说,它可能不是最快的(我没有测量),但清晰度是最重要的,不是速度。@craigcaulfield我想知道为什么这不能提供问题的答案。他的答案只是需要一些细节来说明为什么它是最快的。确切地说,我给出了我的建议,并将提供统计数据。请为你的答案提供额外的细节/解释,以提高帖子的质量。非常感谢。
public class ClassTest
{
@Test
public void testSystemCurrentTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
System.currentTimeMillis();
}
stopwatch.stop();
System.out.println("System.currentTimeMillis(): " + stopwatch);
}
@Test
public void testDateTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
(new Date()).getTime();
}
stopwatch.stop();
System.out.println("(new Date()).getTime(): " + stopwatch);
}
@Test
public void testCalendarTime()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Calendar.getInstance().getTimeInMillis();
}
stopwatch.stop();
System.out.println("Calendar.getInstance().getTimeInMillis(): " + stopwatch);
}
@Test
public void testInstantNow()
{
final Stopwatch stopwatch = Stopwatch.createStarted();
for (int i = 0; i < 1_00_000; i++)
{
Instant.now();
}
stopwatch.stop();
System.out.println("Instant.now(): " + stopwatch);
}
}
(new Date()).getTime(): 36.89 ms
Calendar.getInstance().getTimeInMillis(): 448.0 ms
Instant.now(): 34.13 ms
System.currentTimeMillis(): 10.28 ms