JAVA方法返回一些东西然后发送电子邮件

时间:2016-05-18 09:11:33

标签: java

这是我的代码:

public String addxyz ()
{
    String returnStatus = "";
    DBConnection conn = new DBConnection();
    returnStatus = conn.fun_GetData();

    ArrayList<String> emailList = new ArrayList<String>();
    emailList.add("xyz@gmail.com");
    emailList.add("asd@hotmail.com");

    for(String email : emailList)
    {
        SendEmail sendEmail = new SendEmail();
        boolean statusEmail = sendEmail.SendingEmail(email);
    }

    return returnStatus;
}

我想知道在返回方法状态后,向每个电子邮件地址发送电子邮件的最佳方式是什么。

例如,我有100个电子邮件列表,因此上述方法首先发送100封电子邮件,然后返回状态。

但是我想返回一些内容然后发送电子邮件,这样可能吗?

3 个答案:

答案 0 :(得分:0)

您必须异步发送电子邮件。

您可以很好地修改多线程程序,其中您在不同的执行程序线程中发送电子邮件,主线程返回状态而不会在发送电子邮件时被阻止。

您可以使用Java Executors api。

答案 1 :(得分:0)

对于多线程,你可以这样做:

public String addxyz (String qweqw)
{
    String returnStatus = "status";
    ArrayList<String> emailList = new ArrayList<String>();
    emailList.add("xyz@gmail.com");
    emailList.add("asd@hotmail.com");

        for(String email : emailList)
        {
            // create a thread
            Thread th = new Thread(){           
                @Override
                public void run(){

                    // Your SendMail logic
                    SendEmail sendEmail = new SendEmail();
                    boolean statusEmail = sendEmail.SendingEmail(email);
                }           
            };

            th.start(); // start the thread & continue to next email
        }

        return returnStatus;
}

答案 2 :(得分:0)

从你问题的片段中,状态和参数似乎完全没用。所以你可以这样做:

// in main execution path
String returnStatus = "status";
new Thread( new Runnable() {
  @Override public void run(){ addxyz("dummy"); }
 } ).start();

但我真的怀疑这会成功。我想你的例子错过了在函数中可以改变状态的地点和原因。那么这个解决方案是无效的!

更新

从你的状态在函数内部发生变化的角度来看,你可以将其余部分包装在一个Thread / Runnable中并运行它。例如:

....
returnStatus = conn.fun_GetData();

new Thread( new Runnable() { @Override public void run() {
    ArrayList<String> emailList = new ArrayList<String>();
    emailList.add("xyz@gmail.com");
    emailList.add("asd@hotmail.com");

    for(String email : emailList)
    {
        SendEmail sendEmail = new SendEmail();
        boolean statusEmail = sendEmail.SendingEmail(email);
    }
}}).start();

return returnStatus;

在Java 8中,您还可以使用Lambda:

new Thread( () -> {
  // your code here
} ).start();