使用executorservice的java邮件

使用executorservice的java邮件,java,multithreading,email,executorservice,Java,Multithreading,Email,Executorservice,我正在使用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));

我正在使用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();

最近的列表可能是200300500等等……现在我想在上述情况下实现executorservice。有人能告诉我在这里实现executor服务的方法吗。

使用默认的executor服务从executor获得它。(最好不是单线程)然后创建可运行或可调用(如果您需要一些fedback)任务来处理邮件发送,将不同的部分作为参数(地址等)。然后像您在示例中所做的那样进行循环,但不是直接调用这些行,而是将前面在每个步骤中描述的任务汇总起来。

您需要注意的是,邮件服务器可能是非线程安全的,而且如果只有一个邮件服务器,它也无法解决问题,因为在这种情况下,您的资源受到限制(但执行不会在主线程中受阻).

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

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");
message.setRecipients(MimeMessage.RecipientType.TO, memebr+ "@abc.com");
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));