1. 订单处理:(用户下单后可能支付状态不明确,我们后台可以通过多线程去主动核实第三方支付状态,来更新我们系统的订单状态)
2. 登录后用户信息处理:(用户登录后应该通知各相关系统将用户常用数据进行缓存,来快速响应登录用户)
3. 并发量大的场景:譬如从一个目录里读入大量文件写入数据库,使用多线程能够极大提高效率
4. 循环验证的场景:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证 1 万条 url 路径是否存在,正常情况要循环 1 万次,逐个去验证每一条 URL,这样效率会很低,假设验证一条需要 1 分钟,总共就需要 1 万分钟,有点恐怖。这时可以用多线程,将 1 万条 URL 分成 50 等份,开 50 个线程,每个线程只需验证 200 条,这样所有的线程执行完是远小于 1 万分钟的。
5. 任务执行进度的场景:需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量 (这样不同方法可以共享),任务执行一定程度就给变量值加 1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
6. 商城系统中的页面静态化:因为在一个固定的时间需要对商品进行一遍静态化,由于商品数量比较多 如果使用单线程将耗时过长,我们使用一个定长线程池进行批量执行,将任务放在队列中,多个线程同时领取并执行。
通俗的讲:就是你有很多商品上架了,然后商品很多,你可以去使用线程池进行上架操作,使用多线程操作。
总结:总之使用多线程就是为了充分利用 cpu 的资源,提高程序执行效率,当你发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。不过 CPU 执行哪个线程的时间和顺序是不确定的,即使设置了线程的优先级,因此使用多线程的风险也是比较大的,会出现很多预料不到的问题,一定要多熟悉概念,多构造不同的场景去测试才能够掌握!
二、多线程的优缺点
多线程的好处:
1. 可以使用线程把程序中占据时间长的的任务放到后台去处理
2. 可以设置一个进度条来显示处理的进度,使用户界面更加吸引人
3. 程序的运行效率可能会提高
4. 在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.
多线程的缺点:
1. 设置更多的线程需要更多的内存空间
2. 线程中止需要考虑对程序运行的影响
3. 如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.
4. 通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生