打字猴:1.700461473e+09
1700461473
1700461474 标题:XX银行国庆信用卡抽奖活动 收件人:ZIKnC@NOKdloNM.com……发送成功!
1700461475
1700461476 标题:XX银行国庆信用卡抽奖活动 收件人:zNkMI@HpMMSZaz.com……发送成功!
1700461477
1700461478 标题:XX银行国庆信用卡抽奖活动 收件人:oMTFA@uBwkRjxa.com……发送成功!
1700461479
1700461480 标题:XX银行国庆信用卡抽奖活动 收件人:TquWT@TLLVNFja.com……发送成功!
1700461481
1700461482 标题:XX银行国庆信用卡抽奖活动 收件人:rkQbp@mfATHDQH.com……发送成功!
1700461483
1700461484 由于是随机数,每次运行都有所差异,不管怎么样,我们这个电子账单发送程序是编写出来了,也能正常发送。我们再来仔细地想想,这个程序是否有问题?Look here,这是一个线程在运行,也就是你发送的是单线程的,那按照一封邮件发出去需要0.02秒(够小了,你还要到数据库中取数据呢),600万封邮件需要33个小时,也就是一个整天都发送不完,今天的不发送完,明天的账单又产生了,日积月累,激起甲方人员一堆抱怨,那怎么办?
1700461485
1700461486 好办,把sendMail修改为多线程,但是只把sendMail修改为多线程还是有问题的呀,产生第一封邮件对象,放到线程1中运行,还没有发送出去;线程2也启动了,直接就把邮件对象mail的收件人地址和称谓修改掉了,线程不安全了。说到这里,你会说这有N多种解决办法,其中一种是使用一种新型模式来解决这个问题:通过对象的复制功能来解决这个问题,类图稍作修改,如图13-2所示。
1700461487
1700461488
1700461489
1700461490
1700461491 图13-2 修改后的发送电子账单类图
1700461492
1700461493 增加了一个Cloneable接口(Java自带的一个接口),Mail实现了这个接口,在Mail类中覆写clone()方法,我们来看Mail类的改变,如代码清单13-4所示。
1700461494
1700461495 代码清单13-4 修改后的邮件类
1700461496
1700461497 public class Mail implements Cloneable{
1700461498
1700461499 //收件人
1700461500
1700461501 private String receiver;
1700461502
1700461503 //邮件名称
1700461504
1700461505 private String subject;
1700461506
1700461507 //称谓
1700461508
1700461509 private String appellation;
1700461510
1700461511 //邮件内容
1700461512
1700461513 private String contxt;
1700461514
1700461515 //邮件的尾部,一般都是加上”XXX版权所有”等信息
1700461516
1700461517 private String tail;
1700461518
1700461519 //构造函数
1700461520
1700461521 public Mail(AdvTemplate advTemplate){
1700461522
[ 上一页 ]  [ :1.700461473e+09 ]  [ 下一页 ]