我正在开发一个代码,其中有一组insert和select语句。这是一个使用servlet / jsp的基于Web的应用程序。如何确保一次一个请求访问此方法。
我应该使用:
public void insertDetails()
{
//Select Statement
If //result of Select statment == "X"
insert1
else
insert 2
}
答案 0 :(得分:9)
通常,使用synchronized来控制数据库访问意味着“你做错了”。数据库具有控制并发访问的各种内部机制,因此最好使用它们。除了其他原因之外,在jvm中使用机制可能会限制未来扩展或拥有多个应用程序的能力(即使用相同数据库服务器数据的2个jvms)。
答案 1 :(得分:0)
如果我是你,我会尝试修改我的insert语句来处理if-else
条件,而不是使用synchronized块。
正如jthalborn所指出的,这将确保适当利用数据库的内部并发控制机制,并使您的逻辑与必须处理同步方案分离。