阻塞队列 ArrayBlockingQueue 我给自己挖了一个坑
说一句MMB,
一下午时间,
package cn.tbnb1.seckil.quene; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Callable; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpServletRequest; import org.springframework.context.ApplicationContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import cn.tbnb1.common.utils.CommonConstant; import cn.tbnb1.model.Goods; import cn.tbnb1.service.redis.ICacheService; import cn.tbnb1.utils.SpringContextUtil; /** * 执行请求的工作线程 * @author Administrator * */ public class RequestProcessorThread implements Callable<Boolean> { /** * 自己监控的内存队列 */ private ArrayBlockingQueue<HttpServletRequest> queue; public RequestProcessorThread(ArrayBlockingQueue<HttpServletRequest> queue) { this.queue = queue; } @Override public Boolean call() throws Exception { try { while(true) { // ArrayBlockingQueue // Blocking就是说明,如果队列满了,或者是空的,那么都会在执行操作的时候,阻塞住 HttpServletRequest request = queue.take(); synchronized (this) { ICacheService redisCacheService=(ICacheService)SpringContextUtil.getBean("redisCacheService"); String itemId= request.getParameter("id");//商品id Long res= redisCacheService.get(CommonConstant.ITEMS_STORE+7, Long.class); if(res<=0L){//结束秒杀 redisCacheService.set(CommonConstant.QUEUE_SISZE,0L,10000); // queue.clear(); // return true; 这句话 给自己挖的坑 ,首先我自己是这样想的 ,结束秒杀不就 return 掉,mmb 这样好了,call直接停止了,导致请求的线程全部hodl在这里了,
}else{ Long subtract = redisCacheService.subtract(CommonConstant.ITEMS_STORE+7);//库存 Goods goods = redisCacheService.get("7", Goods.class); String uid = (String)request.getAttribute("Sessionid"); System.out.println("===========抢购结果===========: "+"小菜菜抢购"+goods.toString()); redisCacheService.subtract(CommonConstant.QUEUE_SISZE); } } } } catch (Exception e) { e.printStackTrace(); } return true; } }
梦想一定要有,万一实现了!
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步