Java ExecutorService 实现辅助 [英] Java ExecutorService Implementation Assistance

查看:29
本文介绍了Java ExecutorService 实现辅助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在下面的代码中,userList 获取大量数据,因为发送电子邮件需要很长时间.

In the following code, userList gets high volume of data due to which sending email takes too long time.

如何加快应用程序的速度,以便更快地发送 50000 封电子邮件?也许使用 ExecutorService ?

How can I speed up the application such that 50000 emails are sent faster? Maybe with the use of an ExecutorService?

List<String[]> userList = new ArrayList<String[]>();
void getRecords() {
    String [] props=null;
    while (rs.next()) {
    props = new String[2];
    props[0] = rs.getString("useremail");
    props[1] = rs.getString("active");
    userList.add(props);
    if (userList.size()>0) sendEmail();   
}
void sendEmail() {
    String [] user=null;
    for (int k=0; k<userList.size(); k++) { 
        user = userList.get(k);
        userEmail = user[0];         
        //send email code
    }
}

推荐答案

尝试以这种方式并行化您的代码:

Try parallelize your code in such way:

private final int THREADS_NUM = 20;

void sendEmail() throws InterruptedException {
    ExecutorService executor = Executors.newFixedThreadPool( THREADS_NUM );
    for ( String[] user : userList ) { 
        final String userEmail = user[0];         
        executor.submit( new Runnable() {
            @Override
            public void run() {
                sendMailTo( userEmail );
            }
        } );
    }
    long timeout = ...
    TimeUnit timeunit = ...
    executor.shutdown();
    executor.awaitTermination( timeout, timeunit );
}

void sendMailTo( String userEmail ) {
// code for sending e-mail
}

另外,请注意,如果您不想头疼 - 方法 sendMailTo 必须是无状态的.

Also, note, if you don't want to have a headache - method sendMailTo must be stateless.

这篇关于Java ExecutorService 实现辅助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆