我試圖更改報表的執行,有它在併發完成。在'serail模式'中,執行測試需要30秒,當使用併發模式時,我需要27秒(考慮到必須採取幾個步驟才能完成結果)。爲什麼增加newFixedThreadPool導致性能較差?
,我還沒有得到的東西是這一行:
ExecutorService executor = Executors.newFixedThreadPool(4);
我的電腦裝備有2x2.6 GHz四核和我預料的執行時間會減少,如果是的newFixedThreadPool高(16)。實際上,我越增加newFixedThreadPool執行越慢。這引出了一個問題:我做錯了什麼或者我不明白什麼?!?!
我從嵌入我的執行2個結果截圖。
A. newSingleThreadExecuter - 在23秒
B.運行的newFixedThreadPool(4) - 在43秒運行。
每次我提出「工人」我得到的System.out的的currentTimeMillis和「fatched TKT」的結果是毫秒,它需要從數據庫中獲取數據。 (在戰略A - 它需要〜3ms和B到7ms)。
Stopper stopper = new Stopper();
for (Long iNum : multimap.asMap().keySet())
{
List<Long> tickets = (List<Long>) multimap.get(iNum);
for (Long ticketNumber : tickets)
{
pojoPks = getPkData(iNum);
Callable<PojoTicket> worker = new MaxCommThread(ticketNumber, pojoPks);
Future<PojoTicket> submit = executor.submit(worker);
futures.add(submit);
}
}
System.out.println("futurues: " +futures.size());
for (Future<PojoTicket> future : futures)
{
try
{
PojoTicket pojoTicket = future.get();
//do the rest here
} catch (InterruptedException e)
{
System.out.println("---------------------->InterruptedException");
} catch (ExecutionException e)
{
System.out.println("---------------------->ExecutionException");
}
}
executor.shutdown();
stopper.stop();
呃。爲什麼你會得到如此多的'ExecutionException's? – Gray 2012-08-02 18:02:00
你能發佈你的Worker類代碼嗎?這可能會給出更多的線索,看看發生了什麼。 – 2012-08-02 18:14:31