我在Web Service中有一个执行某些数据库插入的方法。我希望单一访问该方法,这就是我将方法设为同步的原因。但是当在同一时刻对此方法进行多次调用时,同步选项不起作用。 该方法的结构如下所示
public synchronized void display() {
//DataBase updations and Transactions.
}
任何人都可以建议任何可以避免此问题的解决方案。
答案 0 :(得分:0)
问题不在于方法,而是包含此方法的代码的多个实例。
答案 1 :(得分:0)
如何确定同步不起作用?您知道同步适用于 object 级别,因此如果该方法位于servlet中并且servlet容器创建了此servlet的多个实例,那么您运气不好 - 每个servlet实例都可以运行“同步“同步方法。
另外,为什么要在代码中序列化数据库操作 - 任何数据库都完全有能力做到这一点,参见交易和ACID原则。
干杯,
答案 2 :(得分:0)
你可以试试 -
创建一个单独的类来处理所有数据库操作,例如 - insert,delete,create table等。
使所有方法同步。
此类应在代码中初始化一次。
从此类创建数据库连接,并将该连接设置为此类(必须同步此setter方法)。请记住,应该在代码中创建一次连接,就像处理数据库的上述类的对象一样。
然后在多个线程中使用此类的相同对象。应该这样做。