鉴于面试经常被问到线程知识,而我又不是一个真正有过高并发编程经验的程序员,我打算造一个多线程实现项目功能的demo。很不幸,我失败了。
高并发、多线程、分布式,实不相瞒,最近晚上都能做噩梦。我不是个勤奋的人,不过我是个狠人,睡不着就熬夜加班。
我最初的方向有两个:
1)多线程实现文件上传
2)多线程实现邮件发送。
于是开始网上查询资料,期间也咨询过我一帮BAT的大学同学(30k也不知道怎么拿到手的,真厉害,问什么什么不会。。。)。最终发现,每个人都在说高并发与多线程,却没有人讲的明白。期间最令我头疼的就是培训班的那一堆光告,每次提到多线程要么卖票,要么就秒杀。也能够来理解吧,毕竟在业界混得下去有几个人会去培训班忽悠学生呢。
文件上传我卡在了,不知道怎么合并到项目中,其中又没有有用的代码。最终方向又到了右键发送,面临的问题就更头疼了,我连右键发送都不会。
1、所以首先解决Java实现邮件发送:
在发送方qq邮箱开启此功能,会要求发送短信验证,照做即可:
原生代码实现QQ邮箱发送功能:
public static void main(String[] args){
String userName="1260122836@qq.com";
String passWord="写自己的";//QQ邮箱开启此功能后,会要求发送一个验证信息,之后会获取的一个验证码
String subject="主题";
String content="该邮件用于测试程序邮件功能,无需回复,造成不便敬请原谅!";
Session session=null;
try {
//创建一个资源文件
Properties prop= new Properties();
//显示日志
prop.setProperty("mail.debug","true");
prop.setProperty("mail.host","smtp.qq.com");//邮箱类别
prop.setProperty("mail.smtp,auth","true");//设定验证开启
prop.setProperty("mail.transpot.protocol","smtp");//发送方式
prop.setProperty("mail.port","465");//设置服务器端口号
prop.setProperty("mail.smtp.ssl.enable","true");//设置ssl加密开启
MailSSLSocketFactory factory= new MailSSLSocketFactory();//创建加密证书
prop.put("mail.smtp.ssl.socketFactory",factory);//
session = Session.getInstance(prop);//获取具有以上属性的邮件session--》类似连接池
Transport transport = session.getTransport();//创建获取连接
transport.connect(userName,passWord);//连接
Message message= new MimeMessage(session);//创建一个信息
message.setFrom(new InternetAddress(userName));//设定发送方
message.setSubject(subject);//设置主题和内容
message.setContent(content,"text/html;charset=utf-8");
Address[] addresses= new Address[1];//设置目标地址
addresses[0]=new InternetAddress("1604785307@qq.com");
//发送邮件
transport.sendMessage(message,addresses);
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}