0

我有这个我想用线程调用的方法,因为我想在后台独立执行这个方法。那么,谁能告诉我我该怎么做?

我在EmailNotification课堂上有以下功能

public class EmailNotification {
public void SendEmailNotificationForCampaign(String[] pCamp_ids,
            List<String> pReciepientAddresses, campaign pCampObj,
            ThemeDisplay pThemeDisplay, OPERATION pOperation,
            List<String> pSmptpObjList, String pLogoPath) {

        GenerateCampaignEmailMessage(pCamp_ids, pReciepientAddresses, pCampObj,
                pThemeDisplay, pOperation, pSmptpObjList, pLogoPath);
    }
}

以下是调用上述方法的 RestaurantPortlet 类的代码

EmailNotification emailnotifyObj = new EmailNotification();
                            emailnotifyObj.SendEmailNotificationForAdvertise(sAdvIds,
                                    RecipientAdress, updatedAdv, pthemeDisplay,
                                    OPERATION.AD_DELETE, ReadSmtpDataForMailNotification(), pthemeDisplay.getPortalURL()+"/eMenuAdvertise-portlet/img/eMenuLogo.png");

那么我如何使用线程实现 SendEmailNotificationForCampaign 方法。谁能让我指导一下?我是线程概念的新手。

4

4 回答 4

1

创建一个内部包含 ExecutorService 的服务,并将电子邮件发送任务传递给 executor 服务。依稀:

class EmailService {
   private ExecutorService executor;

   public sendMail(arguments) {
      executor.submit(new Runnable() {
         //send mail with given parameters
      }
   }
}

这样,您将拥有后台运行的线程的句柄,并且可以在需要时关闭它们(例如运行时间过长)。如果同时启动太多线程,简单地启动新线程可能会杀死您的应用程序。

看看教程

于 2013-01-18T08:54:34.500 回答
1

最简单也可能是最好的想法是为所有待处理的电子邮件创建一个静态队列。所有生产者线程都会将邮件添加到队列中,而另一个线程将处理并发送这些电子邮件。

看看 wiki 中的生产者/消费者问题,它会给你一个很好的想法。

于 2013-01-18T08:47:26.620 回答
1

您的问题的简短回答是:

Runnable task = new Runnable () {
    public void run() {
        //your code here, for example:
        EmailNotification emailnotifyObj = new EmailNotification();
        emailnotifyObj.SendEmailNotificationForAdvertise(sAdvIds,
                                RecipientAdress, updatedAdv, pthemeDisplay,
                                OPERATION.AD_DELETE, ReadSmtpDataForMailNotification(), pthemeDisplay.getPortalURL()+"/eMenuAdvertise-portlet/img/eMenuLogo.png");
    }
}

new Thread(task).start();

注意:

  • 这将或不会按预期工作,具体取决于做什么GenerateCampaignEmailMessage。特别是,如果它访问您也可以从其余代码访问的变量,则需要正确同步这些访问。
  • 如果您发送许多电子邮件,您不想为每封电子邮件创建一个线程,而应该使用线程池。
于 2013-01-18T08:47:44.170 回答
1

根据我的建议,除了使用 JMS 之类的线程之外,还可以使用 java 邮件发送消息。

如果您希望使用 Thread 发送邮件,您也可以使用 TimerTask。

如果您只需要 Thread 而不是其他选项来使单个方法可同步。

检查链接

public synchoronized setCount(int count){
   this.count = count;
}
于 2013-01-18T08:48:41.167 回答