以下是我的代码的某些部分,它使用了线程。目的是从数据库中检索所有记录(大约 5,00,000 条)并向它们发送警报电子邮件消息。我面临的问题是变量 emailRecords 变得非常繁重,并且花费了太多时间来发送电子邮件。如何通过使用多线程来快速处理,以便并行处理 5,00,000 条记录?我尝试使用 ExecutorService 但在实现时感到困惑。我在方法 checkName()、getRecords() 和 sendAlert() 中搞混了。所有这三种方法都被相关地使用。那么,在哪里使用 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
}
}
}