JMS is a Java messaging specification that defines a common way for Java programs to create, send, receive, and read distributed messages asynchronously in a loosely coupled manner. It provides a unified message API and simplifies portability between clients. Key concepts include connection factories, connections, sessions, message producers, destinations, message consumers, and messages. The JMS provider handles connections and destinations, while clients handle message production and consumption using sessions. ActiveMQ is an open source JMS provider that supports optional message scheduling functionality.