What Care Must Be Taken In Multi-Threaded JMS Clients?
Concerning the JMS specification JMS sessions are single-threaded. Thus, if multiple threads simultaneously access a session or one of its consumers or producers the resulting behavior is undefined. In addition, if multiple asynchronous consumers exist on a session, messages will be delivered to them sequentially and not in parallel. To take advantage of multiple threads with JMS, use multiple sessions. For example, to allow parallel synchronous receive requests, design the application so that only one consumer may be active per session and use multiple sessions.