2016-08-09 110 views
-1

我想測量ReentrantLock和Synchronization的TPS。同一時間我想畫一個圖表來顯示線程數量隨着線程的變化而變化。如何比較ReentrantLock和同步的TPS

,但現在,我找不到一個滿意的工具來完成後援結果是這樣的畫面: The Example

是否有任何工具或示例,可以幫助我實現嗎?

謝謝! 我寫了一些代碼,但我不擅長收集數據優雅。

private ReentrantLock lock = new ReentrantLock(); 

public synchronized void testSynchronized() { 
    sleepRandomTime(); 
} 

public void testReentrantLock() { 
    lock.lock(); 
    try { 
     sleepRandomTime(); 
    } finally { 
     lock.unlock(); 
    } 
} 

private void sleepRandomTime() { 
    long sleepTime = (int) (Math.random() * 100); 
    try { 
     Thread.sleep(sleepTime); 
    } catch (InterruptedException e) { 
     Thread.currentThread().interrupt(); 
     throw new RuntimeException(e); 
    } 
} 

public class ThreadTest1 extends Thread { 
    @Override 
    public void run() { 
     testSynchronized(); 
    } 
} 

public class ThreadTest2 extends Thread { 
    @Override 
    public void run() { 
     testReentrantLock(); 
    } 
} 
+0

你到目前爲止嘗試過什麼?首先,您可以編寫一個程序來執行您正在測試的工作,然後顯示結果。繪製圖表應該有自己的問題。 – jokka

+0

現在,我添加了一些代碼。至今我找不到一種有效的方式來收集顯示TPS的數據。謝謝 – StackNow

回答

0

對於微型基準測試,我使用JMH。嘗試一下。順便說一句,在爭用的情況下,讀寫鎖的速度比同步塊要快幾個數量級,特別是如果您通過寫入操作重疊讀取操作。

+0

我試過JMH。恩,這是一種有效的方式,謝謝 – StackNow