我正在尝试编写一个Java类来同时使用多线程发送和读取来自JMS队列的消息以加快速度。我有下面的代码。Java:将消息发送到多线程的JMS队列
System.out.println("Sending messages");
long startTime = System.nanoTime();
Thread threads[] = new Thread[NumberOfThreads];
for (int i = 0; i < threads.length; i ++) {
threads[i] = new Thread() {
public void run() {
try {
for (int i = 0; i < NumberOfMessagesPerThread; i ++) {
sendMessage("Hello");
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
threads[i].start();
}
//Block until all threads are done so we can get total time
for (Thread thread : threads) {
thread.join();
}
long endTime = System.nanoTime();
long duration = (endTime - startTime)/1000000;
System.out.println("Done in " + duration + " ms");
此代码的工作,并将然而,许多消息,我的JMS队列,我说的(通过NumberOfThreads和NumberOfMessagesPerThread)。但是,我不相信这是真正的多线程工作。例如,如果我将线程设置为10并将消息设置为100(因此总数为1000条消息),则每个线程需要100条线程和10条消息。即使下面的代码也是一样。
for (int i = 0; i < 1000; i ++) {
sendMessage("Hello");
}
我在做线程的权利吗?我期望多线程代码比仅仅一个普通的for循环要快得多。
最后一段很重要 - 在测量性能时总是从单线程开始,然后从那里递增地移动。在某些时候,性能甚至可能开始下降。 – Deltharis 2014-09-25 12:10:52