如果我尝试通过它同步不同的值,我试图弄清楚我的同步(“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结果取决于从前一个取得的结果。
答案 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 ){
...
}
}
}
提示:上面的例子显示了一个类内部的锁定,如果你想在类之间锁定那么你的锁对象应该是静态的/在这些类之上还是全局的,但要小心你的自我死锁!