阻塞队列 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;
} }
阻塞队列 ArrayBlockingQueue 我给自己挖了一个坑的更多相关文章
- JAVA可阻塞队列-ArrayBlockingQueue
在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的Condition实现的,但是JAVA类中提供了这项功能,就是ArrayBlockingQueue, ArrayBlockingQu ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- Java多线程-新特征-阻塞队列ArrayBlockingQueue
阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素 ...
- java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现
演示一个阻塞队列的使用 public class BlockingQueueTest { public static void main(String[] args) { //创建一个包含三个元素的阻 ...
- 阻塞队列---ArrayBlockingQueue,LinkedBlockingQueue,DelayQueue源码分析
阻塞队列和非阻塞队列阻塞队列和非阻塞队列的区别:阻塞队列可以自己阻塞,非阻塞队列不能自己阻塞,只能使用队列wait(),notify()进行队列消息传送.而阻塞队列当队列里面没有值时,会阻塞直到有值输 ...
- Java基础--阻塞队列ArrayBlockingQueue
ArrayBlockingQueue是阻塞队列的一种,基于数组实现,长度固定,队尾添加,队首获取, 构造函数: ArrayBlockingQueue(int capacity) ArrayBlocki ...
- Java中的阻塞队列-ArrayBlockingQueue(一)
最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...
- 并发编程-concurrent指南-阻塞队列-数组阻塞队列ArrayBlockingQueue
ArrayBlockingQueue类是实现了BlockingQueue. ArrayBlockingQueue是一个有界的阻塞队列,其内部实现是将对象放在一个数组中. 放入元素方法: (1) add ...
- 并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究
一.ArrayBlockingQueue类图结构 如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,takeIndex是出队下标,c ...
随机推荐
- ES标准中的相等比较算法 SameValue SameValueZero
1.相等比较算法 The Abstract Equality Comparison Algorithm (==) The Strict Equality Comparison Algorithm (= ...
- 怎样写APP计划书-20150313早读课
我们每天都会收到拥有APP创意的人们的电话和邮件,他们想知道把这样的APP做出来需要多少钱.在Calvium,我们尽可能帮助他们,但有时候 做这样的报价真的很难.询问一款APP的价值,就和询问一条绳子 ...
- EXTJS4自学手册——简单图形(circle,rect,text,path)
一.画圆形: xtype: 'button', text: '画图一个圆', handler: function (btn) { Ext.create('Ext.window.Window', { l ...
- dbHelper类操作数据库
using System; using System.Collections; using System.Configuration; using System.Data; using System. ...
- 什么是SAAS模式网站?
说到“SAAS”,它的读法非常有趣,有“萨斯”,有“S.A.A.S”, 还有中文白话“啥事”的.不过,大多不熟悉的朋友第一反应可能是非典?,别误会,此“SAAS”非彼“SARS”,一字之差,但是意义完 ...
- 单例模式获取JDBC连接
package com.jdbc.test; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...
- hive 用户订单行为 基础操作
今天用hive查询用户日志表.这是日志表的格式: user_id,item_id,cat_id,merchant_id,brand_id,month,day,action,age_range,gend ...
- 简体字冯|docker-安装docker私有库
原创文章,转载请注明出处. 作者:简体字丶冯; QQ:564372931 安装docker 各终端安装docker 教程 菜鸟docker教程 就挺好,本着不重复造轮子的原则就不深入了,自己学习. 如 ...
- ARM处理器的运行模式
ARM处理器的7种运行模式 用户模式( usr ):ARM处理器正常的程序执行状态: 快速中断模式( fiq ):用于高速数据传输或通道处理: 外部中断模式( irq):用于通常的中断处理: 管理模式 ...
- grub手动引导win7
grub>rootnoverify (hd0,0)--->win7系统安装盘号 grub > chainloader +1 grub > makeactive ---& ...