0 0

发送邮件需要创建独立的线程吗?5

项目里面有个登录后邮件提醒功能,有个login()方法,有个sendEmail()方法,由于login方法还有其他逻辑业务,请问一下sendEmail需要创建一个独立的线程给它进行发送邮件吗?如果需要那该怎么写呀?
2012年6月29日 08:45

13个答案 按时间排序 按投票排序

0 0

login 和发送消息 用线程,这个线程必须跟线程池一起用,貌似好像有人说发送消息多,线程就会增多,不然,你用个线程池不用的就 shutdown ,线程池也有很多种的,自己先去看下他们的区别吧,之后用个空跑,一直监控消息,有就发送呗

2012年6月30日 15:18
0 0

login方法里轮到发邮件的时候,那里就写启动一个线程,那个线程就去执行发邮件。login方法可以继续往下执行,与发邮件不冲突,不用等到邮件发了才继续走

2012年6月30日 13:15
0 0

jms应该是这个问题最典型的解决方案了

2012年6月29日 16:32
0 0

这种情况一般用异步,实现方法就是去开个线程去发送邮件。自己一般单独开辟线程,使用不当会造诚不可预估的问题,最好用现成的实现的api来实现最好。你说的用线程来发的思路是正确的!

2012年6月29日 16:04
0 0

发送邮件短信之类的 东西  最好做成异步的 

2012年6月29日 14:54
0 0

写个触发器,一但触发,后台发短信。

2012年6月29日 14:01
0 0

逻辑上说,登陆跟发邮件两个事情没有什么关系,并且你可能还有很多其它地方需要发邮件。故应该用一个专门的"模块"发邮件.

数据库建一个表,里面存需要发的邮件信息 (titile, content, to, cc...)

login时,写一条数据到这个表中即可。

然后,有一个线程每隔一段时间扫描这个表,如果有需要发送就邮件,就发送。 (可以用quantz配置)

2012年6月29日 11:34
0 0

综合 魔力猫咪 niuzai   和剑锋凛冽 的回答就完整了
1.看响应速度, 如果速度十分慢, 建议采用创建线程的形式异步处理
2.创建线程有可能会很多, 所以采用连接池管理线程
3. 补充一个: 在spring中配置spring框架自带的线程池

xml文件中配置
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">         <property name="corePoolSize" value="5" />         <property name="maxPoolSize" value="10" />         <property name="queueCapacity" value="25" />  </bean>

<bean id="test" class="test.TaskExecutorTest">        <constructor-arg ref="taskExecutor" />  </bean>   


java代码
public class TaskExecutorTest {
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {   
this.taskExecutor = taskExecutor; 
}
public void sendmail(HashMap params) {     
taskExecutor.execute(new MailTask(params));    
}

public void login(HahMap params){
    //before...
    sendmail(HashMap params);
    //after...
}

private class MailTask implements Runnable {   
private HashMap params;   
public MailTask (HashMap params) {     
this.params= params;   
}   
public void run() {     
   //do something...
}
}
}


补充: 采用异步处理的好处是, 当发送mail非常耗时, 你点击登录按钮时,登录页面会始终在连接状态等待登录, 如果使用异步处理, 直接可以登录系统进行操作, 而不必关心新增的线程处理发送邮件的问题。

2012年6月29日 10:15
0 0

sendEmail()通过jms来做吧,跟login尽量分离。提高login的响应速度,减少与login的耦合吧!

2012年6月29日 10:07
0 0

由于发送邮件包含在登录请求中,如果它耗费时间很长的话,个人觉得还是有必要异步发送邮件的。另外这里还有个问题,所有用户登录之后等会进行发邮件。如果有100个用户登录,就要创建100个发送邮件的线程,所以如果异步发送邮件的话,建议结合线程池处理。

2012年6月29日 09:53
0 0

一般来说,发送邮件需要进行SMTP的服务器验证,相对是比较消耗时间的,如果你在login后续逻辑处理中没有邮件相关联的任何事情,最好使用异步。一般使用Java实现多线程有三种方法:
继承Thread类,这样的话,进行启动比较简单,代价就是你不能在继承其他类了;
实现Runnable接口,线程启动稍微复杂一点,但提供了更多的灵活性;
实现Callable接口,这个接口允许线程返回值,使用比较复杂,而且好像和你的需要关联不是很大。
实现多线程的方法基本就这三种,看你自己的需要了

2012年6月29日 09:42
0 0

如果仅仅是“登录后邮件提醒功能”的话,没必要另外创建一个独立的线程了吧,因为你这个sendEmail还是要靠登陆来触发,直接在login()里面调用sendEmail()就好了。
如果你另外有独立的job之类的专门用来发邮件的话,是可以考虑用多线程的。
仅供参考.

2012年6月29日 09:06
0 0

这个要看现在的事件响应速度。如果按照同步的写法速度可以接受,那么就没必要搞异步的。
核心是在你设计的压力下,响应速度能否达到指标。达到了,就不用优化,至少不用那么着急的去优化。另开线程跑异步什么的,复杂度可比同步代码高很多。不要想当然的去进行所谓的优化,优化是建立在科学的测量上面的。

2012年6月29日 09:03

相关推荐

    多线程发邮件

    通过JavaMail API,我们可以创建邮件、设置收件人、抄送人、主题和正文,然后通过SMTP服务器发送邮件。 为了使代码更加灵活,可以考虑将邮件内容作为参数传递给Callable任务,而不是固定在任务内部。这样,同一个...

    C#多线程发送邮件,发送工资条

    6. **线程间的通信**:如果需要在发送邮件的过程中与其他线程交互,可以使用WaitHandle类(如ManualResetEvent或AutoResetEvent)来同步线程。 通过上述技术,我们可以构建出一个能够高效并行发送工资条邮件的C#...

    多线程智能发送邮件

    在“多线程智能发送邮件”的场景中,系统会先智能地生成对账单Excel,接着将文件压缩,然后利用多线程技术同时发送邮件。这个过程涉及到多个关键技术点,下面将详细讲解。 首先,**操作Excel** 是一个关键环节。这...

    邮件投递,多线程的例子

    4. 创建线程实例,将待发送的邮件参数传入,并启动线程。 5. 控制主线程等待所有子线程完成,可以使用`join`方法来实现。 为了确保线程安全,可能还需要考虑以下几个方面: - 锁机制:如果多个线程同时访问同一...

    spring线程发送邮件

    本文将深入探讨"spring线程发送邮件"这一主题,结合标签"源码"和"工具",我们将从源码层面理解Spring如何实现线程异步发送邮件,并探讨相关工具的使用。 在Spring框架中,邮件服务的实现主要依赖于`javaMailSender`...

    基于Python实现多进程的发送邮件.zip

    本课程设计的目标是利用Python实现多进程发送邮件的功能。 首先,我们需要了解Python中的`multiprocessing`模块,它是Python提供的一个标准库,用于实现多进程。通过创建子进程,每个进程可以独立地执行任务,互不...

    .Net用线程来实现定时发送邮件

    总之,".Net用线程来实现定时发送邮件"这个项目结合了.NET的多线程技术、定时器和电子邮件服务,创建了一个能够按预定时间间隔自动发送邮件的实用工具。开发者可以借此学习和理解如何在.NET环境中实现并发和定时任务...

    C#实现定时发送邮件功能

    在这个例子中,`StartSending`方法创建了一个定时器,每小时调用一次`client.Send`发送邮件。如果邮件发送成功,会在控制台输出"邮件已发送";如果遇到错误,则会捕获异常并输出错误信息。 请注意,这是一个简化的...

    关于《多线程定时任务邮件服务》说明

    在IT行业中,多线程定时任务邮件服务是一个常见的需求,特别是在服务器管理和自动化运维场景下。这个服务能够定期执行某些任务,并通过电子邮件的方式将结果或通知发送给相关人员。下面,我们将详细探讨这一主题。 ...

    从xml读写邮件发送邮件

    可以使用async/await关键字异步发送邮件,避免阻塞UI线程,提高程序响应性。 7. 错误处理:在实际开发中,需要对可能出现的异常进行捕获和处理,如网络错误、SMTP服务器拒绝连接等。 8. 配置管理:邮件发送的相关...

    Android后台发送邮件

    在Android平台上实现后台发送邮件是一项常见的任务,尤其对于那些需要自动同步或通知功能的应用来说。在后台发送邮件意味着用户无需直接操作应用,程序会在适当的时机默默地执行发送过程,只要设备有网络连接。以下...

    java自动发送邮件

    通过上述分析,我们可以看到,使用Java和J2EE框架实现自动发送邮件不仅需要对相关API有深入的理解,还需要考虑到系统的配置、安全性和性能。在实际开发中,开发者应根据具体的需求和环境,合理设计邮件发送的逻辑,...

    VC发送邮件程序

    7. **多线程支持**:为了不影响用户界面,发送邮件的操作可能在后台线程进行,这需要理解并正确使用VC++的多线程特性。 8. **SSL/TLS加密**:为了增强安全性,SMTP通信可能会使用SSL(Secure Sockets Layer)或其...

    ASP.NET MVC 发送邮件,支持多个邮箱格式。

    3. **异步处理**:为了提高用户体验和避免阻塞 UI 线程,发送邮件操作通常采用异步方式进行。 #### 三、发送邮件的具体实现 1. **创建 MailMessage 对象并设置属性**: - 设置发件人和收件人信息。 - 设置邮件...

    java使用定时器,定时发送邮件

    例如,你可以创建一个名为`EmailSenderTask`的类,其中的`run()`方法负责发送邮件。这个`run()`方法应该使用JavaMail API或者第三方库(如Apache Commons Email)来实现邮件的创建、设置属性和发送。 邮件发送的...

    android 后台发送邮件

    在Android平台上实现后台发送邮件是一项常见的任务,尤其对于那些需要自动通知、消息推送或数据同步的应用来说。在本文中,我们将深入探讨如何在Android后台环境中有效地实现这一功能,以及涉及的相关知识点。 首先...

    java邮件发送组件

    2. **多线程处理**:为了提高群发效率,可以使用多线程并发发送邮件。但是,过多的并发可能会触发邮件服务商的反垃圾邮件策略,因此需要适当控制并发数量。 3. **错误处理和重试机制**:在群发过程中,可能会遇到...

    多线程定时任务邮件服务

    在Java中,可以使用`Thread`类或者`Runnable`接口来创建线程,还可以利用`ExecutorService`和`ThreadPoolExecutor`进行线程池管理,提高资源利用率并避免过度创建线程导致的性能问题。多线程在本场景中用于并发执行...

    php swoole 多进程发送邮件

    在“多进程发送邮件”的场景下,每个进程负责发送一部分邮件,从而提高整体的发送速度。需要注意的是,多进程间的通信(如共享数据)需要使用特定的机制,如信号量、管道、共享内存等,以避免数据冲突。 3. 发送...

    C# 发送邮件源码 Winform

    批量发送邮件时,你可以将收件人信息存储在一个数据结构中,如列表或数据库,然后遍历这些信息,为每个收件人创建并发送邮件。注意,为了避免被当作垃圾邮件发送者,应遵循邮件发送的最佳实践,限制发送频率,并确保...

Global site tag (gtag.js) - Google Analytics