Trying to debug concurreny when using ads in print ads is a losing battle, as your print statements may have their own concurrency error and not print in the expected order. Trying to debug or print your way out of a concurreny error may seem good, but I don't think that will give you the result you want. You need to use careful thinking and logic to reason that your code is correct (more computer science than software engineering).
Concurrency problems are very complex. If you have not read concurrency in Practice, be sure to read it. Then look at all the possible ways that your synchronized block can be achieved, everything that it can change, going beyond blocking, etc.
source share