我在 Web 服务中有一个方法,它正在执行一些数据库插入。我想要对该方法的单一访问,这就是我将方法设为同步的原因。但是,当在同一个即时同步选项中对该方法进行多次调用时,该选项不起作用。该方法的结构如下所示
public synchronized void display() {
//DataBase updations and Transactions.
}
任何人都可以提出任何可以避免这个问题的解决方案。
我在 Web 服务中有一个方法,它正在执行一些数据库插入。我想要对该方法的单一访问,这就是我将方法设为同步的原因。但是,当在同一个即时同步选项中对该方法进行多次调用时,该选项不起作用。该方法的结构如下所示
public synchronized void display() {
//DataBase updations and Transactions.
}
任何人都可以提出任何可以避免这个问题的解决方案。
您如何确定同步不起作用?您知道同步在对象级别上起作用,因此如果该方法在一个 servlet 中并且 servlet 容器创建了该 servlet 的多个实例,那么您就不走运了 - 每个 servlet 实例都可以同时运行“同步”方法。
此外,您为什么要在代码中序列化 DB 操作 - 任何 DB 都完全有能力做到这一点,参见。事务性和 ACID 原则。
干杯,
问题不在于方法,而在于包含此方法的代码的多个实例。
你可以尝试以下 -
创建一个单独的类来处理您的所有数据库操作,例如插入、删除、创建表等。
使所有方法同步。
此类应在您的代码中初始化一次。
在该类外部创建一个数据库连接,并将该连接设置为该类(此 setter 方法必须同步)。请记住,连接应该在您的代码中创建一次,例如处理数据库的上述类的对象。
然后在多个线程中使用这个类的同一个对象。那应该工作。