Stack was one of the original collection classes, along with Vector, Hashtable etc. All those collection classes were designed to be "threadsafe".
Imagine what would happen if two threads have access to the same Stack. If the stack is not threadsafe, then one might be half way through "push"ing an element, when another tries to "pop" one. The result could be a real mess.
So the methods are synchronized, to make sure that each operation completes before another
thread may do anything with that object.