说一句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 我给自己挖了一个坑的更多相关文章

  1. JAVA可阻塞队列-ArrayBlockingQueue

    在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的Condition实现的,但是JAVA类中提供了这项功能,就是ArrayBlockingQueue, ArrayBlockingQu ...

  2. Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍

    1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...

  3. Java多线程-新特征-阻塞队列ArrayBlockingQueue

    阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素 ...

  4. java 5并发中的阻塞队列ArrayBlockingQueue的使用以及案例实现

    演示一个阻塞队列的使用 public class BlockingQueueTest { public static void main(String[] args) { //创建一个包含三个元素的阻 ...

  5. 阻塞队列---ArrayBlockingQueue,LinkedBlockingQueue,DelayQueue源码分析

    阻塞队列和非阻塞队列阻塞队列和非阻塞队列的区别:阻塞队列可以自己阻塞,非阻塞队列不能自己阻塞,只能使用队列wait(),notify()进行队列消息传送.而阻塞队列当队列里面没有值时,会阻塞直到有值输 ...

  6. Java基础--阻塞队列ArrayBlockingQueue

    ArrayBlockingQueue是阻塞队列的一种,基于数组实现,长度固定,队尾添加,队首获取, 构造函数: ArrayBlockingQueue(int capacity) ArrayBlocki ...

  7. Java中的阻塞队列-ArrayBlockingQueue(一)

    最近在看一些java基础的东西,看到了队列这章,打算对复习的一些知识点做一个笔记,也算是对自己思路的一个整理,本章先聊聊java中的阻塞队列 参考文章: http://ifeve.com/java-b ...

  8. 并发编程-concurrent指南-阻塞队列-数组阻塞队列ArrayBlockingQueue

    ArrayBlockingQueue类是实现了BlockingQueue. ArrayBlockingQueue是一个有界的阻塞队列,其内部实现是将对象放在一个数组中. 放入元素方法: (1) add ...

  9. 并发队列 – 有界阻塞队列 ArrayBlockingQueue 原理探究

    一.ArrayBlockingQueue类图结构 如图ArrayBlockingQueue内部有个数组items用来存放队列元素,putindex下标标示入队元素下标,takeIndex是出队下标,c ...

随机推荐

  1. iOS学习笔记-自己动手写RESideMenu

    代码地址如下:http://www.demodashi.com/demo/11683.html 很多app都实现了类似RESideMenu的效果,RESideMenu是Github上面一个stars数 ...

  2. MyTest——边界检测

    实现思路如下: Step1:大文件的内存映射,多线程数据读取,加快读取速度. Step2:点云数据预处理(抽希.去噪点). Step3:Step2处理后数据使用kdtree进行离散点排序. Step4 ...

  3. CSS 温故而知新 background常用属性

    1.background-repeat 不用说,常用直接no-repeat 2.background-size 常用的分为两个,一个是铺满:cover, 另一个是使图像适应宽高:contain 3.b ...

  4. Java实现XSS防御

    XSS概述 跨站脚本攻击(Cross Site Scripting),缩写为XSS.恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行, ...

  5. 复杂可编程逻辑器件CPLD的基本结构

    复杂可编程逻辑器件CPLD的基本结构 文章出处:czhlcai 发布时间: 2008/12/08 | 6911 次阅读 专业薄膜开关打样工厂,12小时加急出货   1.基于乘积项的CPLD结构 CPL ...

  6. 344. Reverse String【easy】

    344. Reverse String[easy] Write a function that takes a string as input and returns the string rever ...

  7. iOS 集成微信支付【转载】

    目前项目里有微信支付的需求,调研过一段时间后,发现其实并没有想象中的那么困难.如果你只是想实现该功能,一个方法足以,但是若你想深入了解实现原理.就需要花费更多的功夫了.目前我只清楚微信支付需要做签名, ...

  8. 使用 NGUI Toggle 制作单选框

    好久没写了,今天来把关于NGUI的做的简单功能发上来~ 这个是做单选框的.用了新版本的NGUI后,发现没有以前的Checkbox了,在网上查了之后才知道是用Toggle代替了以前的Checkbox.现 ...

  9. csla 与高cpu

    在项目中一直使用csla 4.13. 项目一直正常,但是偶尔会出现iis占用的cpu 突然100%, 后面客户量大的情况,加入了缓存的机制.100%的情况出现的更多了. 当时有数据库死锁的原因.cpu ...

  10. ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。

    Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...