I just thought I'd add an answer here.
As you've hinted at, in java if it does HTTP, the chances are when you get right down to it, it's some sort of servlet yes.
And you don't have to worry about multithreading in terms of load or deadlock etc as long as you follow the rules.
As others have pointed out, Servlets are shared between requests. If you put anything into them that holds 'state' (a member variable within the servlet) it will be shared, and could therefore be concurrently accessed.
Your maps are definately one of those things.
I suggest you look into EHCache, which is an 'in memory' caching solution ideal for your purposes. At the point of use, it appears just like a Map.
Element element = new Element("key1", "value1");
cache.put(element);
But it manages the entire lifecycle of the object you put in it, when it expires etc. And it also handles concurrency for you. It's what I usually call 'automagic'.
The best thing about EHCache is that you can also use it to scale your application. You could run an identical server, using a round robin load balancer (apache) to choose which server gets the next request, and share the cache between instances. EHCache is loosing ground to other caching mechanisms but in my opinion it's still by far the best solution. And it's ideal for your purpose. (I don't work for terracotta!)