【发布时间】:2014-11-08 01:00:19
【问题描述】:
我想看看使用多线程生产者而不是单线程生产者会产生多少时间差异。我在本地机器上设置了一个 ActiveMQ,编写了一个生产者类,该类将在其构造函数中初始化并启动 JMS 连接。我将消息限制设置为 3M,将所有消息推送到 ActiveMQ 大约需要 50 秒。我只发送了一个字符串“hello world”3M 次。
然后我使用相同的生产者对象(一个连接但多个会话)并使用线程大小为 8 的 ExecutorService 运行它。在run 方法中,我会将 3M 除以 8,以确保每个线程发送的消息不超过 375000 条。在这种情况下,推送所有消息大约需要 60 秒。
ExecutorService service = Executors.newFixedThreadPool(8);
for (int i = 0; i < 8; i++) {
service.execute(producer);
}
然后我创建了八个生产者,每个生产者都有自己的连接,并使用 ExecutorService 或线程大小为 8 运行它们。这次推送所有 3M 消息大约需要 68 秒。
for (int i = 0; i < 8; i++) {
service.execute(new Producer());
}
我想知道,为什么单线程生产者在这里表现更好?我对每个场景运行了大约 10 次,但结果保持不变。
【问题讨论】:
标签: java multithreading jms