您的位置:首页 > 其它

ActiveMQ-JMS(四):回调模式下的线程模型

2016-11-30 09:57 232 查看

综述

创建连接时,会创建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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: