一个很典型的例子,登录名不能重复的问题
非常危险的方式:
if(service.checkLoginName(loginName)) {
//在多线程情况下,当前线程运行到此处时有可能被挂起,而另外一个线程完全可以使用loginName注册成功
service.register(......);//然后当前线程恢复运行,再使用loginName注册成功,这样就有了登录名一样的两个用户。
}
解决方法:在数据库中创建唯一约束,而不是自己做处理保证唯一性(唯一性无法保证)
try {
service.register(......);//创建用户
}catch(DataIntegrityViolationException e) {//登录名已存在
//给页面提示信息
}