Section 2.14 of JMS 2.0 Spec:
JMS could have required that all its objects support concurrent use. Since support for concurrent access typically adds some overhead and complexity, the JMS design restricts its requirement for concurrent access to those objects that would naturally be shared by a multi-threaded client. The remaining objects are designed to be accessed by one logical thread of control at a time.
Supports Concurrent usage: Destination, ConnectionFactory, Connection
Does not support concurrent usage: JMSContext, Session, Producer, consumer
Not sure why thread safety of Message is not discussed in spec?
EDIT
Is Message thread safe? Can two threads share it without race?
No. Message is not thread safe. It should not be shared between threads.