@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping(value = "/add",method = RequestMethod.GET)
public String request(){
Integer stock;
String sql = "select stock from shop_order where id=1 ";
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
if (result==null||(stock = (Integer)result.get(0).get("stock"))<=0) {
// log.info("xia dan shibai,meiyou kucun le");
return "shouqing";
}
stock--;
jdbcTemplate.update("update shop_order set stock=? where id=1",stock);
// log.info("shengyu"+stock);
System.out.println("shengyu" + stock);
return "success";
}
听到有老师讲,单机tomcat这段代码会出现高并发访问问题,会出现超卖的行为。
但是我测试了很多遍,包括压测是不会出现超卖的行为的。按我自己的理解,tomcat是以队列的方式一条一条处理请求的,代码走完了,下个线程才会执行,z怎么会出现超卖的行为呢?有知道的大神帮忙解答一下么?