Using an explicit synchronized block and using Collections.synchronizedList(new ArrayList()) will work equivalently, with respect to mutual exclusion. However, if you must iterate over the list returned by the call to Collections, you must explicitly synchronize on that list externally anyway, per the java spec (sorry, SO won't let me link to it here).
Another thing to consider is overhead. Collections.synchronizedList(List orig) creates a new object that controls access to the original list implementation. Depending on how often you plan to make this call, and how many different ways you access the original list object, you may be better off synchronizing it externally.
synchronizedList