To add to what Henry said, you might see different number of repetitions of each letter. If I were to represent the execution of both threads simultaneously, you'll see how this is possible
In the above example, A is printed 4 times but B and C are printed 3 times each. This is a very simple example,
you might get confusing results if both threads are executing the for loop at the same time [Edit: I miss the part that the printAll method is synchronized so this can't happen]. You can add the
thread name to the output to understand it better