When you write
private Object syncObject = new Object();
public void someFunction(Stuff stuff)
{
     synchronized(syncObject)
     {
         list.add(stuff);
     }
}
public void someOtherFunction()
{
     synchronized(syncObject)
     {
         for(Stuff stuff : list)
         {
             stuff.doStuff();
         }
     }
}
Then what it means is that the Monitor of the syncObject object does not allow multiple threads inside it, it allows only a single Thread into that object's monitor. This is called mutual exclusion, http://en.wikipedia.org/wiki/Mutual_exclusion
This is basically so that if you have multiple threads, then you can make execute specific code blocks only one thread at a time. For example, while you iterate the array through one, but you're adding items to that array in another, and you're removing in a third. You don't want them to mess with each other, because that can create inconsistent results.
The function
Collections.synchronizedCollection(Collection<T> c)
creates a Decorator around the Collection to make its methods synchronized, for example.