0

我正在使用 java 邮件 API。我能够将电子邮件发送给各个收件人,

transport.connect();
for loop {
    member = list.get(i)
    message.setRecipients(MimeMessage.RecipientType.TO, memebr+ "@abc.com");
    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
}
transport.close();

收件人列表可能是 200,300,500 等等.....现在我想在上述情况下实现 executorservice。任何人都可以让我知道在这里实施执行者服务的方法是什么。

4

3 回答 3

0
Sample code look like this:-

ExecutorService executor = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 10; i++) {
            Member member = list.get(i);
            Runnable worker = new EmailSender(member);
            executor.execute(worker);
        }
        executor.shutdown();
        while (!executor.isTerminated()) {
        }
        System.out.println("Finished all threads");

在 EmailSender 类中编写发送电子邮件功能

message.setRecipients(MimeMessage.RecipientType.TO, memebr+ "@abc.com");
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
于 2015-01-29T18:29:41.690 回答
0

使用从Execturors. (最好不是单线程。)然后创建处理邮件发送的可运行或可调用(如果您需要一些反馈)任务,将不同的部分作为参数(地址等)。然后就像您在示例中所做的那样循环,但不是直接调用这些行,而是总结我之前在每个步骤中描述的任务。
您应该注意的是邮件服务器可能是非线程安全的,而且如果只有一个邮件服务器,它不会解决问题,因为在这种情况下您会受到资源的限制(但执行获胜'不要阻塞你的主线程)。

于 2012-07-10T07:25:06.837 回答
0

您需要注意的主要问题是邮件地址列表的并发消费。创建一个对象,该对象将保存一个发送操作所需的所有数据,并将这些对象放入ConcurrentLinkedQueue. 用于poll从队列中弹出项目。

于 2012-07-10T08:28:21.247 回答