Synchronized methods Libs.updatePaths() requests for resolved class path of the current project. That initializes a lot of features in Eclipse that may start jobs in new threads. As a result two threads may be invoking Libs.updatePaths(), the first one waiting for the other, while Eclipses rules may demand the other to yield to the first.
The request for class path should be moved out of synchronization block.