我在Java中構建了一個基準測試應用程序作爲實驗。該工具的目的是找出特定數據庫(例如Derby,MySQL)在不同設置下的速度。Java併發查詢
目前我正試圖找出在同一時間執行多個查詢時數據庫有多快。
我想創建多個線程,其中每個線程執行多個查詢。但目前查詢似乎在另一個查詢完成後執行,而不是同時執行。
我已經得到了以下(簡化)代碼:
Runner testCase = new Runner();
for (int i = 0; i < THREAD_COUNT; i++) {
Thread testThread = new Thread(testCase);
testThread.start();
}
public class Runner implements Runnable {
public void run() {
for (int i = 0; i < Benchmarker.QUERY_COUNT; i++) {
stopwatch2.start();
List<Person> selectData = dataHandler.selectData();
stopwatch2.stop();
counter += stopwatch2.getStopwatchValue();
}
}
}
礦的CPU testsystem有兩個核心,因此應該可以運行在兩個時間多線程,對不對?
有人想法如何實現這個選項?
謝謝你的時間和幫助!
更新 - 添加selectData方法代碼:
public List<Person> selectData() {
List<Person> data = new ArrayList<Person>();
try {
// Select all persons from the database
ResultSet resultSet = connection.prepareStatement("SELECT * FROM PERSON ORDER BY name").executeQuery();
// Add all the persons to a arraylist
while (resultSet.next()) {
data.add(new Person(resultSet.getString("name")));
}
// Close the resultset
resultSet.close();
} catch (SQLException ex) {
Logger.getLogger(Derby.class.getName()).log(Level.SEVERE, null, ex);
}
return data;
}
如果你把'System.out.println'了'for'之後,沒有它打印你得到的查詢結果之前? – bluefoot 2011-03-09 11:04:47
是的,但在for循環之後,我輸出了線程的總執行時間。而且由於線程尚未完成,時間不正確。 當我在for循環中添加testThread.join()時,在所有已執行的線程都準備好之後打印時間,但線程等待每個其他完成。因此線程1啓動並在線程2啓動之前完成。 – NickGreen 2011-03-09 11:52:50
您是否嘗試過使用eclipse調試基準測試應用程序,並找出在等待第一個線程完成時其他線程被阻塞的方法? – 2011-03-09 12:10:48