如何缓存锁以同步对域对象的访问

时间:2017-01-30 18:19:33

标签: java multithreading synchronization

我有一个域对象说一个代表用户帐户的帐户。现在我想要同步访问帐户。

public void operate(Account account123)
    synchronized(account123){
    }
}

假设正在使用Hibernate来获取帐户。多个会话可能检索相同的帐户,即帐户123表现为多个对象

在尝试操作account123时,如何确保多个线程可以访问同一个Account对象?

2 个答案:

答案 0 :(得分:0)

使用数据库锁和事务而不是Java的synchronized。你正在以错误的方式接近解决方案。

答案 1 :(得分:0)

在任何情况下,在谈论数据库时都需要一些称为事务的东西。

换句话说:您需要保证不同的进程不会并行运行并造成数据不一致。

特别是在分层应用程序中,要执行此操作的层是数据库(这是提供此类服务的数据库的核心功能之一)。

或者,(有时)可以在更高层内构建这样的逻辑;但这是A)更难和B)更容易出错。

理想情况下,您将查看底层数据库以及此组件为您提供的机制。

如果一个 JVM始终只执行该方法,则当前代码有效 - 因为 synchronized 阻止仅在该JVM进程中有效。另一个JVM不会被阻塞,因此数据不一致。