Static Analysis of Java Mutithreaded and Distributed Applications