Java 与数据库同步

Java 与数据库同步,java,Java,关于Java中“最佳实践”的快速问题。假设您有一个数据库对象,数据库的主要数据结构为映射。此外,假设您想要同步地图的任何获取/设置信息。同步访问/修改地图的每个方法更好吗,还是每次修改/访问地图时都要在地图周围创建同步块 在一般情况下,对于非私有方法,最好在私有最终对象上进行同步,而不是在私有同步方法上进行同步。这样做的理由是,您不希望rouge调用程序将输入传递给您的方法并获取锁。对于private方法,您可以完全控制如何调用它们 就个人而言,我避免使用synchronized方法,而是将该方

关于Java中“最佳实践”的快速问题。假设您有一个数据库对象,数据库的主要数据结构为映射。此外,假设您想要同步地图的任何获取/设置信息。同步访问/修改地图的每个方法更好吗,还是每次修改/访问地图时都要在地图周围创建同步块

在一般情况下,对于非私有方法,最好在
私有最终对象
上进行同步,而不是在
私有同步
方法上进行同步。这样做的理由是,您不希望rouge调用程序将输入传递给您的方法并获取锁。对于
private
方法,您可以完全控制如何调用它们


就个人而言,我避免使用
synchronized
方法,而是将该方法封装在
synchronized()
块中。这给了我更严格的控制,并防止外部来源窃取我的显示器。我想不出在什么情况下您会希望提供对监视器的外部源访问,但是如果您这样做了,您可以将锁对象同样传递给它们。但正如我所说,我会避免这种情况。

在一般情况下,对于非私有方法,最好在
私有最终对象上进行同步,而不是使用
私有同步的
方法。这样做的理由是,您不希望rouge调用程序将输入传递给您的方法并获取锁。对于
private
方法,您可以完全控制如何调用它们


就个人而言,我避免使用
synchronized
方法,而是将该方法封装在
synchronized()
块中。这给了我更严格的控制,并防止外部来源窃取我的显示器。我想不出在什么情况下您会希望提供对监视器的外部源访问,但是如果您这样做了,您可以将锁对象同样传递给它们。但正如我所说,我会避免这种情况。

取决于需要原子化的工作单元的范围。如果有一个进程执行多个表示单个状态更改的操作,则需要在映射对象上同步整个进程。如果要同步每个单独的操作,则多个线程仍可以在读写时相互交错。这就像在读取未提交模式下使用数据库游标一样。您可能会在看到不完整/不正确的数据状态的情况下,根据其他一些线程完成了一半的工作来做出决定


(当然,插入强制性建议,使用
java.util.concurrent.locks中的类,而不是synchronized关键字:)

取决于需要原子化的工作单元的范围。如果有一个进程执行多个表示单个状态更改的操作,则需要在映射对象上同步整个进程。如果要同步每个单独的操作,则多个线程仍可以在读写时相互交错。这就像在读取未提交模式下使用数据库游标一样。您可能会在看到不完整/不正确的数据状态的情况下,根据其他一些线程完成了一半的工作来做出决定


(当然,插入强制性建议,使用
java.util.concurrent.locks
中的类,而不是synchronized关键字:)

您是指概念上的数据库吗?或者像SQL数据库这样的数据库?概念上的意义,我应该澄清一下……实际上,我认为这一问题的答案是我问题的后一个建议。理论上,即使某些方法是同步的,但不同的方法可能会同时启动,从而修改地图,对吗?你是指概念上的数据库吗?或者像SQL数据库这样的数据库?概念上的意义,我应该澄清一下……实际上,我认为这一问题的答案是我问题的后一个建议。理论上,即使某些方法是同步的,但不同的方法可能会同时启动,从而修改地图,对吗?