跳过同步(“Cache_Group”)部分,为什么会这样?

时间:2015-06-01 13:02:51

标签: android synchronization

如果我尝试通过它同步不同的值,我试图弄清楚我的同步(“Group_Name”)会被跳过,为什么会这样。

考虑以下问题。

我有一个名为“Group1”的SyncGroup,其中我有一个名为“MBOGroup1”的MBO,其中我有“name”,“password”,“codeCheck”属性。 我获取数据并提取属性为“releaseCode”

现在我有另一个名为“GroupSub1”的SyncGroup,其中我有一个名为“MBOSubGroup1”的MBO,我在其中传递属性“releaseCode” 我得到了一些结果。

条件如下

如果我为“MBOGroup1”获得多行,我为“GroupSub1”设置了一个for循环,并将每个“releaseCode”数据传递给“GroupSub1”并提取结果

大多数情况下会发生某些releaseCode被跳过而我得到的错误“结果”为“GroupSub1”为什么会这样?是因为for循环执行速度比synchronize()word或其他类似CacheGroup策略更快,因为OnDemand和时间为10秒

请帮助。

因为有些数据我需要放置4个以上的for循环,其中我的未来syncGroup结果取决于从前一个取得的结果。

2 个答案:

答案 0 :(得分:2)

sychronized("Cache_Group")

首先想到的是,对字符串进行同步是没用的。

sychronized锁定基于给定的引用而不是值来访问块。使用" String"由于字符串是不可变的并且调用synchronized(" Cache_Group")两次将构造2个具有2个不同引用的字符串,允许第二次迭代打破预期的锁定。

编辑:@see ReentrantLock以获得更好的访问控制

答案 1 :(得分:1)

如果你这样做:

sychronized("Cache_Group")

然后每次想要同步时创建一个字符串,这意味着每次同步不同的对象,你需要的是在函数之间同步一个变量

示例:

public class test{
    final Object lock = new Object;

    public void apple(){
        sychronized(lock ){
            ...
        }
    }

    public void orange(){
        sychronized(lock ){
            ...
        }
    }
}
  

提示:上面的例子显示了一个类内部的锁定,如果你想在类之间锁定那么你的锁对象应该是静态的/在这些类之上还是全局的,但要小心你的自我死锁!