As more and more companies develop and deploy multithreaded Java applications on multi-core hardware, the job of ensuring the quality of these software systems has become more challenging.