在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