同步(“Cache_Group”)部分被跳过,为什么呢?

我试图找出我的同步(“Group_Name”)被跳过,如果我试图通过它同步不同的值,为什么是这样。

考虑以下问题。

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

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

条件如下

如果我得到多个“MBOGroup1”行,我把“GroupSub1”的一个for循环,并将每个“releaseCode”数据传递给“GroupSub1”,并提取结果

大多数情况下,一些releaseCode被跳过,我得到了不正确的“结果”为“GroupSub1”为什么这样? 是由于循环执行速度比同步()字或其他像CacheGroup政策OnDemand和时间为10秒

请帮助。

由于有数据需要放置超过4个循环,其中我未来的syncGroup结果取决于从前一个取得的结果。

如果你做这样的事情:

sychronized("Cache_Group") 

那么每次你想同步的时候你要创build一个string,这意味着你每次同步不同的对象,你需要的是在一个函数之间同步一个variables

例:

 public class test{ final Object lock = new Object; public void apple(){ sychronized(lock ){ ... } } public void orange(){ sychronized(lock ){ ... } } } 

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

 sychronized("Cache_Group") 

首先想到的是,在一个string上同步是没有用的。

同步锁基于给定的引用而不是该值访问块。 使用“string”击败了这个目的,因为string是不可变的,调用同步(“Cache_Group”)两次将构造2个不同的引用的string,允许第二次迭代打破预期的locking。

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