使用executorservice的java邮件
我正在使用java邮件API。我能够向个人收件人发送电子邮件使用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));
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));