2017-08-03 122 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')自己記錄其進度。

或者定期調用一些回調方法來報告可以用來注入日誌輸出(或更新進度條或任何你想要的)的進度。