以下は、スレッドを使用する私のコードの一部です。目的は、データベースからすべてのレコード (約 5,00,000) を取得し、アラート メール メッセージを送信することです。私が直面している問題は、変数 emailRecords が非常に重くなり、電子メール メッセージの送信に時間がかかりすぎることです。5,00,000 レコードが並列処理されるようにマルチスレッドを使用して高速化するにはどうすればよいですか? ExecutorService を使用しようとしましたが、実装に混乱しました。メソッド checkName()、getRecords()、および sendAlert() で混乱しました。これら 3 つの方法はすべて関連して使用されます。では、どこで executorService を使用するのでしょうか??
次のコードの進め方と、編集が必要な部分を教えてください。前もって感謝します!!
public class sampledaemon implements Runnable {
private static List<String[]> emailRecords = new ArrayList<String[]>();
public static void main(String[] args) {
if (args.length != 1) {
return;
}
countryName = args[0];
try {
Thread t = null;
sampledaemon daemon = new sampledaemon();
t = new Thread(daemon);
t.start();
} catch (Exception e) {
e.printStackTrace()
}
}
public void run() {
Thread thisThread = Thread.currentThread();
try {
while (true) {
checkName(countryName);
Thread.sleep(TimeUnit.SECONDS.toMillis(10));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void checkName(String countryName) throws Exception {
Country country = CountryPojo.getDetails(countryName)
if (country != null) {
getRecords(countryconnection);
}
}
private void getRecords(Country country, Connection con) {
String users[] = null;
while (rs.next()) {
users = new String[2];
users[0] = rs.getString("userid");
users[1] = rs.getString("emailAddress");
emailRecords.add(props);
if (emailRecords.size() > 0) {
sendAlert(date, con);
}
}
}
void sendAlert(String date, Connection con) {
for (int k = 0; k < emailRecords.size(); k++) {
//check the emailRecords and send email
}
}
}