new Thread().start內(nèi)部類的使用場景?
下面的這個(gè)方法是發(fā)郵件的抽象出來的一個(gè)公用方法:String[] to 表示收件人列表;subject 郵件主題;templateName 郵件末班,用velocity寫的,Map params 參數(shù),用來填充velocity中的某些字段取值的public void sendHtmlWithTemplate(String[] to, String subject, String templateName, Map<String, Object> params) { final MimeMessage mimeMessage = mailSender.createMimeMessage(); try { final MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage); messageHelper.setFrom(simpleMailMessage.getFrom()); if (ENV_ONLINE.equals(environment)) { messageHelper.setTo(to); messageHelper.setSubject(subject); } else { messageHelper.setTo(adminEmail); messageHelper.setSubject(subject + Arrays.asList(to)); } messageHelper.setSentDate(new Date()); final String content = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, templateName, "UTF-8", params); final String[] logTo = to; messageHelper.setText(content, true); new Thread() { @Override public void run() { mailSender.send(mimeMessage); logger.error("Mailsentto: " + Arrays.asList(logTo) + "\nContent: " + content); } }.start(); } catch (Exception e) { logger.error("emailServiceError error:" + e.getMessage(), e); }}在上面的發(fā)郵件的代碼中,使用了內(nèi)部類如下:new Thread() { @Override public void run() { mailSender.send(mimeMessage); logger.error("Mailsentto: " + Arrays.asList(logTo) + "\nContent: " + content); }}.start();我覺得在這個(gè)地方做這個(gè)控制是很恰當(dāng)?shù)陌?,為什么team leader讓我刪掉這個(gè)new Thread()的部分。原話:“把new Thread全部刪掉,這些郵件發(fā)送不了的bug都沒有暴露出來; 郵件發(fā)送模塊的代碼采用異步發(fā)送方式,失去異常事務(wù)回滾的能力,new Thread要全部刪除;” 不懂是什么意思???問題:1.為什么要去掉new Thread()?2.在什么樣的并發(fā)業(yè)務(wù)場景下,需要使用new Thread()這樣的方式?有沒有更好的解決方法?3.在并發(fā)場景下,使用new Thread().start()的方式有什么弊端?每次new Thread新建對(duì)象性能會(huì)很差么?郵件服務(wù)也是當(dāng)觸發(fā)某個(gè)業(yè)務(wù)規(guī)則的時(shí)候,可能需要大量發(fā)送一下郵件,用線程池好不好呢?
查看完整描述