Tag: 计时

scheduleAtFixedRate未在指定的延迟时间启动任务

我使用SchedulerExecuterService在指定的延迟和给定的时间间隔后执行任务。 ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); scheduler.scheduleAtFixedRate(taskThread,60 ,120 ,TimeUnit.SECONDS); 发生的事情是第一次taskThread在延迟60秒后没有启动,它在延迟超过60秒后启动。 而接下来的执行以120秒的正确间隔开始(不完全是120秒,但是有一个非常小的延迟,可以忽略)。 我的查询是为什么第一次执行延迟超过60秒? 由于任务由线程执行,启动时间是否取决于线程优先级? 如何让它以60秒的精确延迟运行? Quartz库怎么样? 这个库能解决我的目的吗(在特定时间运行工作没有任何延迟)? 提前致谢。

处理时间措施的最佳方法是什么?

我的目标是编写一个框架,用于测量方法执行或事务时间以及处理测量,即存储,分析等。事务可能包括调用外部系统,同步或异步等待结果。 关于这个话题已经存在一些问题,比如 “ 我如何计算方法的执行时间 ” “ 测量Java方法的执行时间 ” “ System.currentTimeMillis vs System.nanoTime ” 所有的答案归结为三种方法来花时间 System.currentTimeMillis() System.nanoTime() Instant.now()和Duration (自Java 8起) 我知道,所有这些都有一些影响 System.currentTimeMillis的() 此方法的结果取决于平台。 在Linux上你获得1ms的分辨率,在Windows中你可以获得10ms(单核)~15ms(多核)。 因此,可以测量大型运行操作或短期运行操作的多次执行。 System.nanoTime() 你获得了一个高分辨率的时间测量,具有纳秒精度(但不一定是纳秒精度),并且在292年后你会得到溢出(我可以忍受)。 Instant.now()和持续时间 从Java 8开始,有新的时间API。 瞬间有第二个和第二个纳米字段,因此它在对象引用的顶部使用两个长值( Duration相同)。 您还可以获得纳秒级精度,具体取决于基础时钟(请参阅“ 具有纳秒分辨率的Java 8 Instant.now()? ”)。 实例化是通过调用Instant.now()完成的, Instant.now()映射到System.currentTimeMillis()以获得正常的系统时钟。 鉴于事实,很明显,最佳精确度只能通过System.nanoTime()实现,但我的问题更多地针对处理一般措施的最佳实践 ,其中不仅包括采取措施,还包括措施处理。 Instant和Duration提供最佳API支持(计算,比较等),但在标准情况下具有os-dependend精度,内存和创建度量的更多开销(对象构造,更深的callstack) System.nanoTime()和System.currentTimeMillis()具有不同的精度级别,但只有基本的“api”支持(长时间的数学运算),但更快和更小以保持在内存中。 那么最好的方法是什么? 有没有我没想过的含义? 还有其他选择吗?

Java性能计时库

我经常在System.nanoTime()对中包装代码以便对其进行计时。 就像是: long start = System.nanoTime(); methodToBeTimed(); long elapsedTime = System.nanoTime() – start; 有什么好的计时库可以解决这个问题吗? 还将接受自行开发的代码。 NB 分析器在这里不是解决方案,因为我想在unit testing中强制执行一些时间限制,所以我想以编程方式对方法进行计时。