Java 如何缓存锁以同步对域对象的访问
我有一个域对象,比如一个代表用户帐户的帐户。现在我希望对帐户的访问应该同步Java 如何缓存锁以同步对域对象的访问,java,multithreading,synchronization,Java,Multithreading,Synchronization,我有一个域对象,比如一个代表用户帐户的帐户。现在我希望对帐户的访问应该同步 public void operate(Account account123) synchronized(account123){ } } 假设使用Hibernate获取帐户。多个会话可能检索同一个帐户,即显示为多个对象的帐户123 如何确保在尝试操作account123时,多个线程可以访问同一Account对象?使用数据库锁和事务,而不是Java的synchronized。您正在以错误的方式处理解决方
public void operate(Account account123)
synchronized(account123){
}
}
假设使用Hibernate获取帐户。多个会话可能检索同一个帐户,即显示为多个对象的帐户123
如何确保在尝试操作account123时,多个线程可以访问同一Account对象?使用数据库锁和事务,而不是Java的
synchronized
。您正在以错误的方式处理解决方案。使用数据库锁和事务,而不是Java的synchronized
。您以错误的方式处理解决方案。在任何情况下,在谈论数据库时,您都需要称为事务的东西
换句话说:您需要保证不同的进程不会并行运行并造成数据不一致
尤其是在分层应用程序中,要实现这一点的层是数据库(这是数据库提供此类服务的核心功能之一)
或者,(有时)可以在更高的层中构建这样的逻辑;但这是A)更难和B)更容易出错
因此,理想情况下,您可以查看底层数据库以及该组件提供给您的机制
如果总是只有一个以上的JVM执行该方法,那么当前代码就可以工作,因为同步阻塞只在该JVM进程内工作。另一个JVM不会被阻止,因此数据不一致 在任何情况下,在谈论数据库时,您都需要一种称为事务的东西 换句话说:您需要保证不同的进程不会并行运行并造成数据不一致 尤其是在分层应用程序中,要实现这一点的层是数据库(这是数据库提供此类服务的核心功能之一) 或者,(有时)可以在更高的层中构建这样的逻辑;但这是A)更难和B)更容易出错 因此,理想情况下,您可以查看底层数据库以及该组件提供给您的机制
如果总是只有一个以上的JVM执行该方法,那么当前代码就可以工作,因为同步阻塞只在该JVM进程内工作。另一个JVM不会被阻止,因此数据不一致 让我这样说:我有一些内存中的操作要做,这些操作与事件E1上的特定实体相关。当我为该实体(A)执行这些操作时,可能会发生与同一实体(A)相关的其他事件,比如E2。现在E1和E2的操作应该同步,因此我想锁定实体A。因此,我想缓存实体A的锁。让我这样说:我有一些与事件E1上的特定实体相关的内存操作要做。当我为该实体(A)执行这些操作时,可能会发生与同一实体(A)相关的其他事件,比如E2。现在E1和E2的操作应该同步,因此我想锁定实体A。因此我想缓存实体A的锁。