有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程Java Executor服务实现帮助

在下面的代码中,userList会获取大量数据,这是因为发送电子邮件花费的时间太长

如何提高应用程序的速度,使50000封电子邮件发送速度更快?也许是用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
    }
}

共 (1) 个答案

  1. # 1 楼答案

    尝试以以下方式并行化代码:

    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必须是无状态的