SpringBoot系列(15): 线程池-多线程Executors并发编程之广播式发送邮件(通知)

摘要:一直都想撸一撸Java中线程池、多线程并发编程的东西,但却苦于朝9晚9的苦逼日子迟迟木有动工,趁这会儿空闲,Debug将采用2篇文章来分享介绍、并采用代码实战关于“Java线程池、多线程并发编程”的实际应用场景!让各位小伙伴体验体验Java中线程池、多线程并发编程的魅力,本文我们将首先以“广播式发送邮件(通知)”为案例进行实战!

内容:对于Java中的线程池、多线程并发编程,相信各位小伙伴都有所耳闻,也大概知晓Java中的几种线程池(即Executors下的那几种),然而在实际的企业级项目业务模块开发中,有些小伙伴总是反应“多线程并发编程”不知道该应用在何处,不知道如何将Executors下的线程池应用到实际的业务场景下,于是乎,就有了本篇文章和下一篇文章!

“多线程编程”其实是相对于“单一线程编程”而言的,主要的作用当然是提高执行效率、系统的吞吐量,因为我们都知道一般一台服务器(或者你自己的电脑),不止1,一般低配的也要2核,好一点就是4核、8核等等。

有1核意味着将可以分配得到1个线程,而1个线程自然而然是用来处理每个请求、执行系统中几乎所有的每个任务,多核自然就意味着可以分配得道多个线程、从而处理多任务、多请求(我们的操作系统OS就是拥有这种特性),而这一点正是我们可以在应用系统中使用“多线程”的原因!

而线程池,顾名思义,就是一个“池”,里面会预先存放N个线程,当需要分配线程执行任务、执行请求时,会优先到“线程池”中获取,然后执行任务,完了之后将放回到“池”中去,省去了每次使用时创建、不用时销毁所带来的资源开销(主要是内存啦!)

下面,我们采用Java中提供的线程池进行多线程并发编程,以“广播式给用户发送邮件或者通知”为实战场景进行代码实战。

(1)既然是给用户“发送邮件”,那“邮箱”字段是少不了了,下面在用户user表中加入“邮箱”字段,其完整的DDL如下所示:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '名字',
  `code` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '工号',
  `email` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

然后,逆向工程生成对应的Entity、Mapper、Mapper.xml等相应实体类,等待着被相应的类所使用!

(2)紧接着,我们建立一个ThreadController控制器,并在其中创建“广播式发送邮件”请求 对应的方法,如下所示:

@RestController
@RequestMapping("thread")
public class ThreadController extends AbstractController{

    @Autowired
    private ThreadService threadService;

    @RequestMapping(value = "all/mail/send",method = RequestMethod.GET)
    public BaseResponse sendAllUerEmail(){
        BaseResponse response=new BaseResponse(StatusCode.Success);
        try {
            threadService.sendAllEmailsV1();

        }catch (Exception e){
            response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage());
        }
        return response;
}
}

 (3)在ThreadService中实现“广播式发送邮件”的核心业务逻辑,其中,我们采用的是FixedThreadPool线程池,预开设了10个线程用于给指定的用户发送邮件!  

更多请见:http://www.mark-to-win.com/tutorial/51029.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值