Synchronization is a way to prevent two threads from accessing the same resource (object) at the same time. The first one to ask for access wins, the second one blocks until the first one is done.
In the Single Threaded Model in the servlet container, the container synchronizes on the servlet for you and assures that only one
thread accesses it at a time. So the servlet can safely assume only one thread will execute its code at a time.
Synchronization always poses a performance risk. It's like forcing a room full of people to exit through one door in single file. It takes longer than letting them use many doors. You might not notice the difference with only a few threads but it can make a big difference in a web server with hundreds or thousands of users.