Java同时请求造成数据重复 解决方案
后台逻辑层书写 同步加锁 关键字synchronized :
/** * 添加 * * @param map 集合 * @return 返回结果 */ @Override public Integer insertxxx(Map<String, Object> map) { /** * 生成信息 */ Integer insertxxx = 0; try { /** * 查询最大id值加一 */ String idSql = "select max(ID)+1 from XXX"; /** * 同步锁定,同一时间多个访问时,会对后面的访问进行堵塞,防止id重复 */ synchronized (idSql) { /** * 查询人员总数并赋值 */ map.put("ID", jdbcTemplate1.queryForObject(idSql, Long.class)); /** * 当id不为空且大于0时操作 */ if (map.get("ID") != null && map.get("ID").toString().trim() != "") { /** * 定义添加语句 */ String insertSql = " insert into xxx()values()"; /** * 调用添加方法 */ insertxxx = jdbcTemplate1.update(insertSql); } } } catch (Exception e) { /** * 返回错误信息 */ e.printStackTrace(); } finally { /** * 返回结果 */ return insertxxx; } }
总结:
synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行,它解决的是多个线程之间访问资源的同步性。