桂林建网站哪家好,厦门seo优化,宿迁做网站优化,网站加后台#x1f370; 个人主页:__Aurora__ #x1f35e;文章有不合理的地方请各位大佬指正。 #x1f349;文章不定期持续更新#xff0c;如果我的文章对你有帮助➡️ 关注#x1f64f;#x1f3fb; 点赞#x1f44d; 收藏⭐️ RedisAtomicInteger
提供了对整数的原子性操作 个人主页:__Aurora__ 文章有不合理的地方请各位大佬指正。 文章不定期持续更新如果我的文章对你有帮助➡️ 关注 点赞 收藏⭐️ RedisAtomicInteger
提供了对整数的原子性操作确保在多客户端并发访问时数据操作的一致性和原子性。 在秒杀活动中物品数量是有限的。通过使用 RedisAtomicInteger可以确保在高并发下物品数量的正确扣减从而防止超卖现象
测试案例
newFixedThreadPool线程池创建10个线程创建任务列表每个任务操作redis自增100次执行任务后关闭线程池记录操作时间
/*** 测试 RedisAtomicInteger 多线程下 自增* 10个线程 每个线程提交任务 每个任务修改100次RedisAtomicInteger 共执行1000次** throws ExecutionException* throws InterruptedException*/
Test
void redisAtomT1() throws ExecutionException, InterruptedException {RedisAtomicInteger redisCount new RedisAtomicInteger(key12345671, redisTemplate.getConnectionFactory(), 0);// 创建 100 个线程 并发执行 increment 操作long start System.currentTimeMillis();ExecutorService pool Executors.newFixedThreadPool(10);ListFuture? futures new ArrayList();for (int i 0; i 10; i) {Future? future pool.submit(() - {// 配额码原子变量值增加,每次增加1for (int j 0; j 100; j) {int count redisCount.incrementAndGet();System.out.println(Thread.currentThread().getName() : count);}});futures.add(future);}// 将会阻塞主线程直到异步任务完成// 等待所有任务完成for (Future? future : futures) {future.get();}// 关闭线程池pool.shutdown();// 检查Redis中的值long finalCount redisCount.get();System.out.println(Final Redis count: finalCount);// 应该输出 100assertEquals(1000L, finalCount);long endtime System.currentTimeMillis();System.out.println(开始时间 start);System.out.println(结束时间 endtime);System.out.println(间隔 (endtime - start) 毫秒);
}执行结果