The first thing in the code that looks wrong is this:
synchronized(new Object()) ...
You are creating a new object and synchronizing on that. However, each time you do this, you synchronize on a new, different object. This will not help with synchronization at all. If you want to synchronize two threads, you should synchronize on a single object. You can remove the whole 'synchronized' construct here, because it doesn't do anything.
What happens is, that the list is printed only two times. But the first time, the list contains "A", "B", "C", and the second time the list contains "A", "B", "C", "A", "B", "C" (it contains the letters two times!).