Java 面试题
目录

Java 中请设计一个秒杀系统。

· 约 3 分钟读完 · 第 240 / 274 章

推荐答案

本题详细解读

1. 问题分析

秒杀系统的核心问题在于高并发场景下的库存管理。多个用户同时请求秒杀时,系统需要确保库存的准确性和一致性,避免超卖或库存不一致的问题。

2. 解决方案

  • 使用原子操作:通过 AtomicInteger 来管理库存,确保在多线程环境下库存的增减操作是原子的,避免并发问题。
  • 库存检查:在秒杀前检查库存是否大于0,如果库存充足则进行秒杀操作,否则返回秒杀失败。
  • 库存扣减:使用 decrementAndGet() 方法原子地减少库存,并返回扣减后的库存值。

3. 代码实现

  • 库存初始化:MAX_STOCK 定义了最大库存量,stock 是一个 AtomicInteger 类型的变量,用于存储当前库存。
  • 多线程模拟:通过创建多个线程来模拟并发秒杀请求。
  • 库存扣减逻辑:每个线程在秒杀前检查库存,如果库存充足则进行扣减,并输出秒杀结果。

4. 注意事项

  • 性能优化:在实际生产环境中,可能需要考虑更多的性能优化措施,如使用分布式锁、缓存等。
  • 异常处理:代码中未处理异常情况,实际应用中需要考虑异常处理机制。
  • 扩展性:此示例为简单实现,实际秒杀系统可能需要考虑更多的业务逻辑和扩展性设计。