public static void main(String[] args) {
//循环测试
for (int i = 0; i <10; i++){
checkConcurrentCift();
}
}
//用于计算并发红包挣抢后的累计金额,验证是否存在并发多读数据
static AtomicInteger p = new AtomicInteger(0);
//测试红包并发
public static void checkConcurrentCift(){
RedisCacheCustomer instance = RedisCacheCustomer.getInstance();
Jedis jedis = instance.getJedisSelectDb(1);
for(int j = 0; j < 100; j++) {
jedis.lpush("test-list:gift", 1 + "");
}
instance.closeJedis(jedis);
System.out.println("模拟红包数据存储完毕");
//模拟多线程抢红包
ThreadPoolExecutor tp = new ThreadPoolExecutor(100, 100, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(20000));
//105个线程并发争抢红包
for (int i = 0; i < 105; i++) {
tp.execute(new Runnable() {
@Override
public void run()
{
RedisCacheCustomer instance = RedisCacheCustomer.getInstance();
Jedis jedis = instance.getJedisSelectDb(1);
String rpoplpush = jedis.rpoplpush("test-list:gift", "test-list:all");
if(rpoplpush == null){
System.out.println("未抢到啊!!");
return;
}
p.addAndGet(Integer.valueOf(rpoplpush));
//System.out.println(Thread.currentThread().getName()+"领取红包-"+rpoplpush);
instance.closeJedis(jedis);
}
});
}
tp.shutdown();
//检测线程池是不是都执行完成
try {
tp.awaitTermination(1, TimeUnit.DAYS);
System.out.println("领取完毕");
Long del = jedis.del("test-list");
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(p);
}
}