我有一个域对象说一个代表用户帐户的帐户。现在我想要同步访问帐户。
public void operate(Account account123)
synchronized(account123){
}
}
假设正在使用Hibernate来获取帐户。多个会话可能检索相同的帐户,即帐户123表现为多个对象
在尝试操作account123时,如何确保多个线程可以访问同一个Account对象?
答案 0 :(得分:0)
使用数据库锁和事务而不是Java的synchronized
。你正在以错误的方式接近解决方案。
答案 1 :(得分:0)
在任何情况下,在谈论数据库时都需要一些称为事务的东西。
换句话说:您需要保证不同的进程不会并行运行并造成数据不一致。
特别是在分层应用程序中,要执行此操作的层是数据库(这是提供此类服务的数据库的核心功能之一)。
或者,(有时)可以在更高层内构建这样的逻辑;但这是A)更难和B)更容易出错。
理想情况下,您将查看底层数据库以及此组件为您提供的机制。
如果一个 JVM始终只执行该方法,则当前代码有效 - 因为 synchronized 阻止仅在该JVM进程中有效。另一个JVM不会被阻塞,因此数据不一致。