综述
- 创建连接时,会创建Transport、InactivityMonitor Worker、InactivityMonitor ReadCheckTimer、InactivityMonitor WriteCheckTimer四个线程。
- 创建生产者不会创建新线程。
- 发送消息,不会创建新线程。
- 创建消费者会创建Session task-x线程,此线程只在运行回调函数时存在,空闲一段时间就会被关闭。新消息到来时再重新创建。每次重新创建,x值加1。
- 新消息到来时,如果没有Session task-x存在,就会重新创建一个线程,用于运行回调函数。
- 由于存在前台线程,main()函数线程退出后,应用仍然不会结束。所以要结束应用,必须调用connection.close()函数。
生产者的线程
创建ActiveMQ连接工厂时,没有线程创建。
new ActiveMQConnectionFactory(brokerURL);
创建连接时,创建如下4个线程。其中Transport线程会为每个连接创建一个,其它3个线程只在创建第一个连接的时候创建一次。
- Thread[ActiveMQ Transport] (Running)
- Daemon thread[ActiveMQ InactivityMonitor Worker] (running)
- Daemon thread[ActiveMQ InactivityMonitor ReadCheckTimer] (running)
- Deamon thread[ActiveMQ InactivityMonitor WriteCheckTimer] (running)
factory.createConnection();
关闭连接,会结束ActiveMQ InactivityMonitor Worker线程。
connection.close()
消费者线程
创建消费者,会创建如下2个线程,一会儿没有使用后,这连个线程就消失了。
- Thread[ActiveMQ Session task-1]
- Thread[ActiveMQ Session task-2]
session.createConsumer(destination);
给消费者设置回调对象,会创建一个线程
- Thread[ActiveMQ Session task-3]
consumer.setMessageListener(this);