面试题答案
一键面试1. 数据结构
使用 AtomicInteger
来表示商品库存数量。AtomicInteger
是Java提供的原子类,基于CAS(Compare and Swap)操作,能在不使用锁的情况下保证对整数操作的原子性。
2. 同步机制
采用乐观锁机制结合CAS操作。具体实现如下:
import java.util.concurrent.atomic.AtomicInteger;
public class Stock {
private AtomicInteger quantity;
public Stock(int initialQuantity) {
this.quantity = new AtomicInteger(initialQuantity);
}
public boolean decreaseStock(int amount) {
while (true) {
int current = quantity.get();
if (current < amount) {
return false; // 库存不足
}
if (quantity.compareAndSet(current, current - amount)) {
return true; // 成功减少库存
}
}
}
}
在 decreaseStock
方法中,通过 compareAndSet
方法尝试更新库存数量。如果更新失败(即其他线程已修改了库存),则循环重试,直到成功或发现库存不足。
3. 与Web应用业务逻辑整合
在电商应用的下单接口中,可以这样整合:
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class OrderServlet extends HttpServlet {
private Stock stock;
public OrderServlet(Stock stock) {
this.stock = stock;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
int orderAmount = Integer.parseInt(request.getParameter("amount"));
if (stock.decreaseStock(orderAmount)) {
// 库存减少成功,处理订单其他逻辑,如生成订单记录
response.getWriter().println("Order placed successfully.");
} else {
response.getWriter().println("Insufficient stock.");
}
}
}
在上述代码中,OrderServlet
接收下单数量,调用 Stock
类的 decreaseStock
方法尝试减少库存,并根据结果返回相应信息。通过这种方式,将自定义的并发控制策略无缝整合到Web应用的业务逻辑中,既保证了库存数据的准确性,又提高了系统的并发处理能力。