我正在編寫一個使用log4j進行日誌記錄的Java多線程應用程序。在我的基準測試期間,我發現每次輸出日誌時都會產生1或2毫秒的延遲。調查後,我發現問題只出現在控制檯輸出中,即使我擺脫了log4j並直接使用System.out.print打印,也發生了這種問題。在該線程,我用了以下測試:Java多線程應用程序System.out.println生成延遲
System.out.println("===============================================================");
long ts = java.lang.System.currentTimeMillis();
String toPrint = "### TEST 1 " + (java.lang.System.currentTimeMillis() - ts) + " ms \n";
toPrint = toPrint + "### TEST 2 " + (java.lang.System.currentTimeMillis() - ts) + " ms \n";
toPrint = toPrint + "### TEST 3 " + (java.lang.System.currentTimeMillis() - ts) + " ms \n";
toPrint = toPrint + "### TEST 4 " + (java.lang.System.currentTimeMillis() - ts) + " ms \n";
System.out.print(toPrint);
System.out.println("===============================================================");
System.out.println("### TEST 1 " + (java.lang.System.currentTimeMillis() - ts) + " ms");
System.out.println("### TEST 2 " + (java.lang.System.currentTimeMillis() - ts) + " ms");
System.out.println("### TEST 3 " + (java.lang.System.currentTimeMillis() - ts) + " ms");
System.out.println("### TEST 4 " + (java.lang.System.currentTimeMillis() - ts) + " ms");
System.out.println("===============================================================");
,輸出是:
===============================================================
### TEST 1 0 ms
### TEST 2 0 ms
### TEST 3 0 ms
### TEST 4 0 ms
===============================================================
### TEST 1 7 ms
### TEST 2 9 ms
### TEST 3 10 ms
### TEST 4 11 ms
===============================================================
什麼是正確的方法爲多線程應用程序直接輸出到控制檯,而無需創建延遲?
我們可以設置log4j來直接做到這一點嗎?
預先感謝你的幫助......
在這種延遲是一個問題 - 每一項工作需要一些時間 - 然後可能創建一個新的線程,只是你的打印。 –
寫入控制檯需要一點時間。就是那樣子。如果您記錄了很多事情來控制它,請減少日誌級別,或完全關閉控制檯日誌記錄。你總是可以「尾巴」你可能產生的日誌文件。 – Andreas
@Andreas非常感謝您的回答。然而,我的CPU沒有飽和,並且在現代服務器上輸出一行2毫秒聽起來不合理。關閉控制檯確實修復了pb。 – deubNippon