我试图弄清楚如果我尝试通过它同步不同的值,我的 synchronize("Group_Name") 会被跳过,为什么会这样。
考虑以下问题。
我有一个名为“Group1”的 SyncGroup,其中有一个名为“MBOGroup1”的 MBO,其中有属性“name”、“password”、“codeCheck”。 我获取数据并提取属性为“releaseCode”
现在我有另一个名为“GroupSub1”的 SyncGroup,其中有一个名为“MBOSubGroup1”的 MBO,我在其中传递属性“releaseCode” 我得到了一些结果。
条件如下
如果我为 "MBOGroup1"获得多行,我为 "GroupSub1"放置一个 for 循环,并将每个 "releaseCode"数据传递给 "GroupSub1"并提取结果
大多数情况下,某些 releaseCode 被跳过,我得到“GroupSub1”的不正确“结果”,为什么会这样?是因为 for 循环的执行速度比 synchronize() 字或其他类似 CacheGroup Policies as OnDemand 和 time as 10seconds 的速度快
请帮忙。
由于我需要在其中放置超过 4 个 for 循环的数据,我 future 的 syncGroup 结果取决于从前一个获取的结果。
最佳答案
sychronized("Cache_Group")
首先想到的是在字符串上同步是没有用的。
根据给定的引用而不是值来同步锁定对 block 的访问。使用“String”会破坏这个目的,因为字符串是不可变的,并且两次调用 synchronized("Cache_Group") 将构造具有 2 个不同引用的 2 个字符串,从而允许第二次迭代打破预期的锁定。
编辑:@see ReentrantLock 以获得更好的访问控制
关于android - 同步 ("Cache_Group")部分被跳过,为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574249/