【发布时间】:2014-08-12 22:34:44
【问题描述】:
我正在尝试使用greenDAO,到目前为止一切顺利。文档或网站(或任何地方 :( )似乎没有涵盖的一件事是它如何处理线程安全。
我知道其他地方提到的基础知识,例如“使用单个 dao 会话”(Android + SQLite 的一般做法),并且我非常了解 Java 内存模型。库内部结构甚至看起来是线程安全的,或者至少是为此目的而构建的。但我所见过的都没有涵盖这一点:
greenDAO 默认缓存实体。这对于完全单线程的程序来说是极好的——对于大多数用途来说是透明的和巨大的性能提升。但是如果我例如loadAll() 然后修改其中一个元素,我在我的应用程序中全局修改同一个对象。如果我在主线程上使用它(例如用于显示),并在后台线程上更新数据库(这是正确和正确的),除非格外小心,否则会出现明显的线程问题。
greenDAO 是否在“幕后”采取任何措施来防止常见的应用程序级线程问题?例如,修改 UI 线程中的缓存实体,同时将其保存在后台线程中(希望它们不要交错!尤其是在修改列表时!)?除了一般的线程安全问题(即 greenDAO 期望并与之配合良好的东西)之外,是否有任何“最佳实践”来防止它们?或者从多线程应用程序安全的角度来看,整个缓存是否存在致命缺陷?
【问题讨论】:
标签: multithreading thread-safety greendao