2013-09-21 30 views
1

在Java如何在多線程程序測試的細粒度,我有簡單的多線程代碼:的Java:

​​

它工作得很好,現在我要運行2個或3個線程和計算所花費的時間用於計算每個線程。然後我會比較一下時間:記下t1t2,如果是|t1 - t2| < small epsilon,我會說我的算法在一些給定的條件下以細粒度執行,也就是說線程花費的時間相對相同。

如何測量線程的時間?

+0

裏面我想你會通過使用分析工具,而不是試圖讀取定時器來更好的服務。即使有計時器,我也不會相信任何小於毫秒的數字。 「納秒」的結果是純科幻小說:恕我直言。建議:這裏有一個關於Eclipse Profiler的優秀教程:http://www.eclipse.org/tptp/home/documents/tutorials/profilingtool/profilingexample_32.html – paulsm4

回答

0

在線程(job)方法的開始和結尾使用System.nanoTime()來計算每次調用花費的總時間。在你的情況下,所有線程將以相同(默認)優先級執行,其中時間片應該分配相當公平。如果你的線程互鎖,出於同樣的原因使用'公平鎖';例如new ReentrantLock(true);

+0

不,我的線程是獨立的,非常適合測量。 'System.currentTimeMillis()'不是很好的時間測量方式嗎? – user2651246

+0

真的不重要,我只是喜歡這種事情的最高分辨率。如果線程的運行時間不足以達到毫秒分辨率,則線程創建的開銷可能更成問題。 – Sam

+1

只是頭向上,System.nanoTime可能會返回看似隨機的值。見http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless – Zagrev

0

添加定時邏輯的運行方法