多线程定时任务

本文探讨了多线程在面试与项目中的重要性,解释了为何使用多线程以提高系统资源利用率。文中列举了火车站售票、用户注册奖励等多线程应用场景,并指出多线程在日常开发中的常见用途,如定时任务和后台服务。文章强调了理解多线程对于开发者的重要性,并介绍了通过线程池实现多线程的方式及其带来的好处,如提高系统吞吐量和任务处理的可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不知道大家有没有这样的面试经历:
面试官:了解多线程吗?
答:这个不太了解
面试官:
在这里插入图片描述

多线程大家在初学的时候,对这个知识点应该有不少的疑惑的。我认为主要原因有两个:

多线程在初学的时候不太好学,并且一般写项目的时候也很少用得上(至少在初学阶段时写的项目基本不需要自己创建线程)。
多线程的知识点在面试经常考,多线程所涉及的知识点非常多,难度也不低。
这就会给人带来一种感觉「这破玩意涉及的东西是真的广,平时也不怎么用,怎么面试就偏偏爱问这个鬼东西」
多线程的知识,由于在项目中实际使用场景很多,在此记录一下。

为什么使用多线程?

首先,我们要明确的是「为什么要使用多线程」,可能有人会认为「使用多线程就是为了加快程序运行的速度啊」。如果你是这样回答了,那面试官可能会问你「那多线程是怎么加快程序运行速度的?」

于我的理解:使用多线程最主要的原因是提高系统的资源利用率。

现在CPU基本都是多核的,如果你只用单线程,那就是只用到了一个核心,其他的核心就相当于空闲在那里了。我们要做的应该是充分发挥计算机多核CPU的优势,将串行的任务改为并行执行,提高执行效率。

多线程有哪些具体的业务场景?

经典场景:
火车站多个窗口卖票。参见:

https://blog.youkuaiyun.com/tomcat_2014/article/details/60575942

多线程离我们远吗?

其实在我们的日常开发中,也有很多的业务场景可以使用到多线程:
1、用户注册完成送大礼包/积分之类,且积分等也是另一个系统并比较耗时;且这类任务即使失败也不是特别重要的。
2、后台线程:比如定期执行一些特殊任务,如定期更新配置文件,任务调度(如quartz),一些监控用于定期信息采集等,笔者在这里也会分享后台的多线程定时任务。
3.Tomcat我相信每个Java后端的同学都认识它,它就是以多线程去响应请求的,我们可以在server.xml中配置连接池的配置,比如:

<Connector port="8080" maxThreads="350" maxHttpHeaderSize="8192" minSpareThreads="45" maxPostSize="512000" protocol="HTTP/1.1" enableLookups="false" redirectPort="8443" acceptCount="200" keepAliveTimeout="15000" maxKeepAliveRequests="-1" maxConnections="25000" connectionTimeout="15000" disableUploadTimeout="false" useBodyEncodingForURI="true" URIEncoding="UTF-8" />

Tomcat处理每一个请求都会从线程连接池里边用一个线程去处理,这显然是多线程的操作。只是框架屏蔽了底层的细节访问。
还有我们在连接数据库的时候,也会用对应的连接池(Druid、C3P0、DBCP等),比如常见的Druid配置。
从上面总结下来,我们可以发现:我们日常「关于多线程的代码」写得不多,但是我们写的程序代码的的确确是在多线程的环境下跑的。

如果我们不懂多线程知识,很直接的一个现实:

在这里插入图片描述

虽然在工作中未必会全部用得上,但如果项目真的用到了,我们如果学过了可能就可以很

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值