0

我在 Web 服务中有一个方法,它正在执行一些数据库插入。我想要对该方法的单一访问,这就是我将方法设为同步的原因。但是,当在同一个即时同步选项中对该方法进行多次调用时,该选项不起作用。该方法的结构如下所示

public synchronized void display() {
   //DataBase updations and Transactions.    
}

任何人都可以提出任何可以避免这个问题的解决方案。

4

3 回答 3

0

您如何确定同步不起作用?您知道同步在对象级别上起作用,因此如果该方法在一个 servlet 中并且 servlet 容器创建了该 servlet 的多个实例,那么您就不走运了 - 每个 servlet 实例都可以同时运行“同步”方法。

此外,您为什么要在代码中序列化 DB 操作 - 任何 DB 都完全有能力做到这一点,参见。事务性和 ACID 原则。

干杯,

于 2012-10-19T11:25:33.860 回答
0

问题不在于方法,而在于包含此方法的代码的多个实例。

于 2012-10-19T11:24:21.110 回答
0

你可以尝试以下 -

  1. 创建一个单独的类来处理您的所有数据库操作,例如插入、删除、创建表等。

  2. 使所有方法同步。

  3. 此类应在您的代码中初始化一次。

  4. 在该类外部创建一个数据库连接,并将该连接设置为该类(此 setter 方法必须同步)。请记住,连接应该在您的代码中创建一次,例如处理数据库的上述类的对象。

  5. 然后在多个线程中使用这个类的同一个对象。那应该工作。

于 2012-10-19T12:20:19.293 回答