Categories: JProfilerScreencast
In the screencast below, I present some of the features in the locking graphs that have been introduced in JProfiler 6.
The test class that is profiled in this screen cast is given below:
public class MonitorTest { // The only monitor that all threads are blocking or waiting on private static final MonitorTest monitor = new MonitorTest(); public static void main(String[] args) throws InterruptedException { // All threads execute this runnable, each thread acquires the // monitor, works for 3 seconds and then waits on the monitor Runnable runnable = new Runnable() { public void run() { synchronized (monitor) { try { // Instead of doing any real work, the thread just // sleeps for 3 second Thread.sleep(3000); monitor.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } }; // 3 threads are started with an offset of 500 ms new Thread(runnable, "Test Thread 1").start(); Thread.sleep(500); new Thread(runnable, "Test Thread 2").start(); Thread.sleep(500); new Thread(runnable, "Test Thread 3").start(); // After 20 seconds, all threads are woken up and the test class // terminates Thread.sleep(20000); synchronized (monitor) { monitor.notifyAll(); } } }