我正在嘗試編寫一個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