首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与数据库同步

与数据库同步
EN

Stack Overflow用户
提问于 2012-03-16 09:13:36
回答 2查看 133关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 09:23:27

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-16 09:22:47

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9730528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档