有关Java中“最佳实践”的快速疑问。假设你有一个数据库对象,数据库的主要数据结构是一个映射。此外,假设您想同步地图的任何获取/设置信息。同步访问/修改地图的每种方法是更好吗,还是每次修改/访问时都希望在地图周围创建同步块?与数据库同步
Q
与数据库同步
0
A
回答
2
取决于你的工作单元的范围,需要是原子的。如果您有一个执行多个操作的进程来表示单个状态更改,那么您希望在Map对象上同步整个进程。如果您正在同步每个单独的操作,多个线程仍然可以在读取和写入时相互交错。这就像在读取未提交模式下使用数据库游标一样。您可能会根据其他线程的半完成工作做出决定,查看不完整/不正确的数据状态。
(当然插入强制性建议使用类来自java.util.concurrent.locks
代替synchronized关键字:))
1
在一般情况下,最好选择非私人方法的private final Object
,而不是private synchronized
方法。这样做的基本原理是,你不希望胭脂主叫方向你的方法传递一个输入并获得你的锁定。对于private
方法,您可以完全控制如何调用它们。我个人不使用方法,而是将方法封装在synchronized()
块中。这给我更严格的控制,并防止外部来源窃取我的显示器。我想不出你想要为你的显示器提供外部源访问的情况,但是如果你愿意,你可以将它们的锁对象传递给它们。但就像我说的,我会避免这种情况。
相关问题
- 1. 与主数据库同步
- 2. Linqtosql与数据库同步
- 3. 与数据库同步数据视图
- 4. 同步进度数据库与SQL Server
- 5. 将Android与网站数据库同步?
- 6. Ehcache与数据库不同步
- 7. Rake与我的数据库不同步
- 8. 保持Gemfire与数据库同步
- 9. 与Azure云数据库系统同步
- 10. AIR:与数据库同步gui?
- 11. 将DataGridView(DataTable)与数据库同步
- 12. 同步与奥尔森TZ数据库
- 13. 同步数据库与服务器
- 14. 与iCloud同步SQLite3数据库
- 15. 保持LinqToSQL与数据库同步
- 16. 与中央数据库自动同步
- 17. 同步elasticsearch&cassandra与postgres数据库
- 18. (部分)与mysql的数据库同步
- 19. 本地数据库与同步适配器的自动同步
- 20. WebSQL数据库是否会与Chrome的应用同步同步?
- 21. 将远程数据库与本地数据库同步
- 22. 将Azure数据库与本地数据库同步
- 23. 与外部数据库同步脱机数据库Windows Phone 7
- 24. 同步本地SQLite数据库与服务器SQLite数据库
- 25. 同步嵌入式数据库与远程数据库
- 26. 同步本地数据库windows phone与数据库服务器
- 27. 同步Android数据库与服务器数据库
- 28. 构建API与跨云数据库同步数据库
- 29. 与远程数据库ipad同步数据库
- 30. 链接/同步SQL数据库与MySQL数据库
你的意思是在概念意义的数据库?或者像SQL数据库那样的数据库? – corsiKa 2012-03-16 01:20:13
概念的意思,我应该澄清... – Sal 2012-03-16 01:20:52
其实,我认为对此的答案是我的问题的后一个建议。从理论上讲,即使一些方法是同步的,也可能同时启动不同的方法,修改地图,对吧? – Sal 2012-03-16 01:22:21