在Java如何在多線程程序測試的細粒度,我有簡單的多線程代碼:的Java:
它工作得很好,現在我要運行2個或3個線程和計算所花費的時間用於計算每個線程。然後我會比較一下時間:記下t1
和t2
,如果是|t1 - t2| < small epsilon
,我會說我的算法在一些給定的條件下以細粒度執行,也就是說線程花費的時間相對相同。
如何測量線程的時間?
在Java如何在多線程程序測試的細粒度,我有簡單的多線程代碼:的Java:
它工作得很好,現在我要運行2個或3個線程和計算所花費的時間用於計算每個線程。然後我會比較一下時間:記下t1
和t2
,如果是|t1 - t2| < small epsilon
,我會說我的算法在一些給定的條件下以細粒度執行,也就是說線程花費的時間相對相同。
如何測量線程的時間?
在線程(job)方法的開始和結尾使用System.nanoTime()
來計算每次調用花費的總時間。在你的情況下,所有線程將以相同(默認)優先級執行,其中時間片應該分配相當公平。如果你的線程互鎖,出於同樣的原因使用'公平鎖';例如new ReentrantLock(true);
不,我的線程是獨立的,非常適合測量。 'System.currentTimeMillis()'不是很好的時間測量方式嗎? – user2651246
真的不重要,我只是喜歡這種事情的最高分辨率。如果線程的運行時間不足以達到毫秒分辨率,則線程創建的開銷可能更成問題。 – Sam
只是頭向上,System.nanoTime可能會返回看似隨機的值。見http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless – Zagrev
添加定時邏輯的運行方法
裏面我想你會通過使用分析工具,而不是試圖讀取定時器來更好的服務。即使有計時器,我也不會相信任何小於毫秒的數字。 「納秒」的結果是純科幻小說:恕我直言。建議:這裏有一個關於Eclipse Profiler的優秀教程:http://www.eclipse.org/tptp/home/documents/tutorials/profilingtool/profilingexample_32.html – paulsm4