Data races, threads reading stale values, are notoriously difficult to detect during testing.vmlens uses tracing of your application to detect data races. vmlens detects all data races without false positives.
Deadlocks, two threads are trying to acquire a lock held by the other thread, depend on the timing of your tests.vmlens analyses the order in which monitors are acquired by your application. This allows vmlens to detect all deadlocks, independent of the concrete timing when a specific lock was acquired.
Race conditions, the result of the computation depends on the timing of your threads, are hard to test systematically and reproducible.vmlens inserts wait, notify instruction during the test run and reruns all tests till all thread interleaving are tested. This makes it possible to test race conditions in a reproducible and systematic way.
All parts of your application in which multiple threads access the same memory location or monitor needs to be tested. vmlens shows you all places in which multiple threads access the same memory location or monitor.
vmlens inserts wait, notify instructions during the test and reruns the test till all thread interleavings are tested. This together with the automatic detection of data races and deadlocks leads to systematic and reproducible tests.
By seeing what in what method multiple threads access the same state you are able to reduce the amount of shared state.
And less shared state means less synchronization monitors needed.
Do you love to write bug-free software? Me too!
It always bothers me when I can not test something. That's why I created vmlens, a tool to test multithreaded java.
Now 4 years and countless tests later vmlens enables you to test multi-threaded java systematic and reproducible. And like vmlens now let my completely test vmlens, vmlens let you test the multithreaded part of your application
Enjoy writing concurrent software secured by tests.