问题遇到的现象和发生背景
线程中执行mailService.sendSimpleMail(mail)就导致线程中断,且下面的System.out.println("发送邮件")无法输出,注释掉sendSimpleMail线程就可以正常发送多封邮件
问题相关代码
@Component
public class ConsumeMailQueue {
@Autowired
MailService mailService;
class PollMail implements Runnable {
MailService mailService;
public PollMail(MailService mailService) {
this.mailService = mailService;
}
@Override
public void run() {
while (true) {
try {
System.out.println("####################");
Email mail = MailQueue.getMailQueue().consume();
if (mail != null) {
//可以设置延时 以及重复校验等等操作
try {
System.out.println("剩余邮件总数:" + MailQueue.getMailQueue().getSize());
System.out.println("email:" + mail.getEmail());
System.out.println("subject:" + mail.getSubject());
System.out.println("content:" + mail.getContent());
mailService.sendSimpleMail(mail);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("发送邮件");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@PostConstruct
public void startThread() {
ExecutorService e = Executors.newFixedThreadPool(1);// 两个大小的固定线程池
e.submit(new PollMail(mailService));
//e.submit(new PollMail(mailService));
}
@PreDestroy
public void stopThread() {
System.out.println("destroy");
}
}
运行结果及报错内容
未注释sendSimpleMail
我想要达到的结果
注释掉sendSimpleMail