“…Forking (start) of the new thread is modeled by a message send-receive pair. For other, more difficult, thread related Java constructs, we follow a distributed trace approach [9] which assumes that only events of the same thread (process) or transition of information from one thread to another are ordered. Unlike the classical distributed trace analysis, Java threads communicate not by messages, but by means of shared data, object locking, and several designated methods, such as join(), wait(), notify().…”