Concurrency can be a problem in Spring MVC, or any other web based application because , as you said, each request is a different thread.
For example, if you created some kind of user counter object you wanted to use to increment every time someone logged into the application, and set it as a class level attribute in a controller, and called methods on it inside the handleRequest() method of the controller, you'd quickly run into synchronization problems.
Luckily, there are some ways to get around this in a web application.
If the web application uses a database, it will enforce atomic transactions, so you can use a table to back the user counter object and not worry about threading issues. (You may still have to worry about transaction issues though, like insuring you start a transaction, read the current number, add 1, write the new number, then commit the transaction. If you start and stop transactions in between these steps you may end up with wrong results - just like unsynchronized code.)
Another way web applications deal with synchronization issues is the idea of scopes. The
J2EE spec specifies page, result, session, and application scopes. You don't need to worry about synchronization at all in page and request scope objects. You usually don't have to worry about it in session objects either. There are some edge cases where a user might have multiple tabs or windows sharing the session where you might need to worry about synchronization. Objects in application scope will need to worry about synchronization, because they're shared by all the users/requests in the application. Unfortunately, a user counter object would have to reside in application scope, so (unless it's backed by a database) you'll need to ensure it's thread safe.
Most web applications don't need to worry about threading issues because most are directly backed by a database, and because most objects used by web apps usually reside in request or session scope. If you get outside of this, you'll need to worry about synchronization. (Things like building your own caching layer on top of the database, storing objects in application scope, or putting objects as class level or static attributes in a class.)