好的,那么以下是修改后的代码,将taskState状态改为等比例分布:
private static void insertData(Connection conn, int threadNo) throws SQLException {
PreparedStatement ps = conn.prepareStatement("INSERT INTO " + TABLE_NAME + " VALUES(?, ?, ?, ?, ?)");
Set taskIdSet = new HashSet<>();
while(taskIdSet.size() < 100000){
StringBuilder sb = new StringBuilder(TASK_ID_PREFIX);
for(int i=0; i<24; i++){
if(i == 21){ // 跳过原序列号位置
continue;
}
int randomNum = (int)(Math.random() * 16);
char hexChar = Character.forDigit(randomNum, 16);
sb.setCharAt(i, hexChar);
}
taskIdSet.add(sb.toString());
}
int taskState1Count = 20000;
int taskState3Count = 20000;
int taskState5Count = 30000;
int taskState7Count = 20000;
int taskState9Count = 10000;
List taskStates = new ArrayList<>();
for (int i = 0; i < taskState1Count; i++) {
taskStates.add(1);
}
for (int i = 0; i < taskState3Count; i++) {
taskStates.add(3);
}
for (int i = 0; i < taskState5Count; i++) {
taskStates.add(5);
}
for (int i = 0; i < taskState7Count; i++) {
taskStates.add(7);
}
for (int i = 0; i < taskState9Count; i++) {
taskStates.add(9);
}
Collections.shuffle(taskStates);
int index = 0;
for (String taskId : taskIdSet) {
int taskState = taskStates.get(index++);
ps.setString(1, taskId);
ps.setString(2, TRANS_NO);
ps.setString(3, BANK_NO);
ps.setString(4, SYSTEM_NO);
ps.setInt(5, taskState);
ps.addBatch();
System.out.println("Thread " + threadNo + ": Inserted taskId " + taskId + " with taskState " + taskState);
}