使用java多线程

时间:2015-05-30 17:44:26

标签: java multithreading executorservice

我正在开发基于网络的应用程序。

我编写代码的计算机有4核 Intel i5 4440 3.10 GHz处理器。

我部署应用程序的计算机有8核 Intel i7 4790K 4.00 GHz处理器。

需要计算的任务之一非常繁重,所以我决定使用java executor框架。

我有这个:

ExecutorService executorService = Executors.newFixedThreadPool(8);

然后我一次添加30个任务。

在我的开发机器上,结果计算在 3秒(以前是 20秒。,当我只使用一个线程时),而在服务器机器上它得到了以 16秒计算(与代码仅使用一个线程时的情况相同)。

你可以猜到我很困惑,并且不知道为什么在服务器机器上它的计算速度要慢得多。

任何知道为什么更快的处理器无法从多线程算法中获益的人?

1 个答案:

答案 0 :(得分:1)

如果没有更多证据,很难猜测根本原因。你能

吗?
  • 在服务器计算机上运行应用程序的配置文件?
  • 使用JConsole连接到服务器计算机并查看线程信息

我的猜测是服务器机器负载很重(可能来自其他应用程序或后台线程?)。也许你的服务器用户/ java应用程序只允许使用核心?

我首先使用 top (在linux上)或任务管理器(windows)来查看运行应用程序时服务器是否处于负载状态。分析/ JMX监视会增加开销,但您将能够找出实际使用的线程数。

最后注意事项 - 服务器使用相同的架构(32/64位),操作系统和主要/次要Java版本而不是开发?