Just for fun
Jlint will check your Java code and find bugs, inconsistencies and synchronization problems by doing data flow analysis and building the lock graph.
Jlint is extremely fast - even on large projects, it requires only one second to check all classes! It is easy to learn and requires no changes in the class files. Jlint has been used in an industrial environment and successfully uncovered faults with little effort! This version of Jlint is the extended version featuring some improved synchronization checks. The original version has been written by Konstantin Knizhnik.
Read more about dynamic and static program checking in the thesis report, where the Jlint extension was a part of the work: