2016-08-09 2 views
-1

ReentrantLock 및 Synchronization.At의 TPS를 측정하고 싶습니다. 같은 시간 스레드의 수가 계속 진행됨에 따라 변경 내용을 보여주기 위해 차트를 그려야합니다. The ExampleReentrantLock 및 동기화의 TPS를 비교하는 방법

는 내가 그것을 달성 할 수있는 도구 나 예를 들어 있나요 :

그러나 지금, 나는 좋았지 결과는이 그림처럼 완료하는 데 만족 도구를 찾을 수없는 이유는 무엇입니까?

감사합니다. 코드를 작성했지만 우아하게 데이터를 수집하는 데 좋지 않습니다.

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를 사용합니다. 시도 해봐. Btw 읽기 - 쓰기 잠금은 경합이 발생할 경우 동기화 된 블록보다 몇 배 빠릅니다. 특히 쓰기 작업으로 래핑을 통해 읽기 작업을 수행하는 경우 더욱 그렇습니다.

+0

JMH를 사용해 보았습니다. 음, 효과적인 방법입니다. 감사합니다. – StackNow