each thread
私はのために働くコードを持っていて、10 minutes
それは私がどのテーブルに基づいて選ぶことになっているのかを決定しますrandom number
。その後、をSQL query
使用してそのテーブルに対してを実行していますPreparedStatement
。result set
それを実行した後、データがにある場合にのみループして、ResultSet
にデータを追加する必要がありList<String> colData
ます。
ここでは、コンマで区切られたcolumnsList
内容が含まれます。table columns
例えば-
col1, col2, col3
以下はコードです-
class ReadTask implements Runnable {
private static Random random = new SecureRandom();
public ReadTask() {
}
@Override
public run() {
...
while ( < 10 minutes) {
double randomNumber = random.nextDouble() * 100.0;
ReadTableConnectionInfo tableInfo = selectRandomConnection(randomNumber);
final int id = generateRandomId(random);
final String columnsList = getColumns(table.getColumns());
final String selectSql = "SELECT " + columnsList + " from " + table.getTableName() + " where id = ?";
preparedStatement = tableStatement.get(table.getTableName()).prepareCall(selectSql);
preparedStatement.setString(1, String.valueOf(id));
rs = preparedStatement.executeQuery();
List<String> colData = new ArrayList<String>(columnsList.split(",").length);
boolean foundData = false;
if (id >= 1 && id <= 5000) {
if (rs.next()) {
foundData = true;
for (String column : columnsList.split(",")) {
colData.add(rs.getString(column));
}
rs.next();//this should return false or an error condition and do I need this here?
}
} else if (rs.next()) {
// do some stuff
}
if (flagValidateData && foundData) {
// iterate through colData map
}
}
}
}
問題文:-
1)同期が必要colData list
かどうか。
2)データを追加する方法List<String> colData
がスレッドセーフかどうか?
3)そして、結果セットをループして追加する方法に他の問題はありますcolData string array
か?そのため、マルチスレッドコードであるため、競合状態でデバッグするのは困難です。