This may be a little old, but as I had the same issue and came across it then I thought I would post my findings to help others.
I had the same issues as the question, I had created a JMS receiver class which set an async listener;
TopicSubscriber receiver = myTopicSession.createSubscriber(myTopic);
JmsMessageListener listener = new JmsMessageListener();
receiver.setMessageListener(listener);
And then I could not terminate the listener in a nice way.
I found the solution was to actually close the connection to my topic. And that this would terminate the listener thread as well.
myTopicConnection.close();
It meant that in my main thread I had to keep a link to the JMS receiver class I had created and then call a close() method to shut it down.