Let's start with some "formal" definitions:
- A pool is a collection of stateless objects
- A cache is a collection of stateful objects
The main distinction between a cache and a pool is what is contained in them. In other words: when you retrieve an object from a cache or a pool, do you need a specific object, or will any object do? If you need a specific object, then each object maintains state; hence, you need to use a cache. If, on the other hand, you can use any object, then the objects do not maintain state and you can use a pool.
--> The wondrous world of Google, my friend..
http://www.google.be/search?hl=nl&q=cache+stateless+objects+java&meta=