A new Timer instance is created for every new JMSContinuation. Every new Timer spawns a new thread. I feel that it should be changed and a new mechanism shared between all JMSContinuation istances should be used. For example: the JMSContinuationProvider class could hold a configurable executor service instance + a DelayQueue. This way there would be a shared pool of threads and they would no longer be created with every new JMSContinuation instance.