2017-08-03 124 views
1

我想在特定的时间间隔内记录某些方法的进度(避免日志溢出)。我做了这个:记录每个循环迭代和线程睡眠是不好的做法?

while (!x.isFinished()) { 
    LOG.info("some progress: {}", x.getStatus()); 
    Thread.sleep(5000); 
} 

至于声纳告诉它是不好的做法是使用Thread.sleep(n),并将它标志为关键的,我在寻找更好的,正确的方式来做到这一点。有什么我可以改进的吗?

的消息是:

在测试中使用了Thread.sleep只是一般一个坏主意。它创建了 脆性测试,根据环境 (“在我的机器上通过!”)或加载,可能无法预料地失败。不要依赖于时机

编辑: 这不是重复的,它不是一个考验。我想在工作周期中记录每个x间隔的时间。

编辑2(根据@Wolf S答案进行说明): 感谢您的回复。它在多个地方使用,我想知道每次是哪个地方。这是示例代码。更重要的是,它给了我一些知识,它需要在生命中完成多少时间并帮助诊断。

我只是想知道是否有一些严格的方法来做到这一点,或只是忽略声纳。

+0

sonarqube具体说什么? – Michael

+0

[如何在单元测试中避免Thread.sleep?]可能的重复(https://stackoverflow.com/questions/36283334/how-to-avoid-thread-sleep-in-unit-tests) – user7294900

+0

所以你真正的问题应该是“为什么Sonarqube认为这是一个测试,当它不是?” – Michael

回答

0

如果这不是测试,那么你的代码没有问题。 (可能取决于代码的其余部分,但通常使用Thread.sleep并不是一个好主意)

0

使您的方法(或对象'x')自己记录其进度。

或者定期调用一些回调方法来报告可以用来注入日志输出(或更新进度条或任何你想要的)的进度。