RedisAtomicInteger 从名字上来说就是 redis 的原子 Integer 数据类型,由于其原子性,可用于秒杀活动物品数量的控制。
以及保证顺序生成数字。
下面示例:创建了 100 个线程的线程池子,submit 中的代码相当于在一个线程的 run 方法中持续执行,
外面 for 循环 100 次,就是往线程池提交 100 次任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| @Autowired private RedisTemplate redisTemplate;
@RequestMapping("/testRedisAtomicInteger") @ResponseBody public Object testRedisAtomicInteger() {
String ticketName = "testRedisAtomicInteger"; RedisAtomicInteger redisCount = new RedisAtomicInteger(ticketName,redisTemplate.getConnectionFactory());
// 创建 100 个线程 并发执行 increment 操作 ExecutorService pool = Executors.newFixedThreadPool(100); for (int i = 0; i < 100; i++) { pool.submit(() -> { // 配额码原子变量值增加,每次增加1 for (int j = 0; j < 100; j++) { int count = redisCount.incrementAndGet(); System.out.println(Thread.currentThread().getName()+": " +count); } }); } return redisCount; }
|