一止长渊
ThreadPoolExecutor

本文中围绕着 ThreadPoolExecutor 将进行相关源码解析

  • 入参参数解析
  • execute 方法
  • Worker 类
  • addWorker 创建新线程的原理
  • runWorker 方法
  • getTask 方法
中断

在 Core Java 中有这样一句话:”没有任何语言方面的需求要求一个被中断的程序应该终止。中断一个线程只是为了引起该线程的注意,被中断线程可以决定如何应对中断 “ 中断是一种协作机制。

也就是说其他线程调用目标线程的 interrupt 方法,并不会让目标线程停止和提前返回抛出 InterruptedException 表明自己提前返回了,调用 interrupt 方法只是给目标线程设置了一个标志位,友好地提示对方可不可以停止手中的事情提前返回,所以调用 interrupt 的方法产生结果完全是掌握在目标线程手中的,目标线程可以自己定义发现中断标志位 true 后的处理逻辑,是停下手中的事情然后还是不理会标志会继续做自己的事情。

容器中同时有两个同类型Bean存在

本文主要介绍容器中同时存在两个同类型的 Bena 解决方法

解决一:对于自己写的两个同类型的 Bean

可以使用@Primary 来标注其中一个 Bean 为主要的

秒杀

一、秒杀业务

秒杀具有瞬间高并发的特点,针对这一特点,必须要做到限流 + 异步 + 缓存(页面静态化)+ 独立部署

秒杀业务最好要求独立部署,是一个独立模块,不和其他服务模块混写在一起,这样大并发进来,也不至于将其他服务模块挤占下线。
缓存需要使用 Redis(时机就是后台将商品上架时放入 Redis 中)否则所有请求打在 db 上,会让数据库崩溃
秒杀商品的库存信息也应该放进库存里,从而可以商品购买可以更新库存