android - 同步 ("Cache_Group")部分被跳过,为什么会这样?

标签 android synchronization

我试图弄清楚如果我尝试通过它同步不同的值,我的 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/

相关文章:

android - 根据可用性在 GPS 和网络提供商之间切换

ios - 同步播放AKSamplerMetronome和AKAppleSequencer

java - java中如何更新大对象而不阻塞其他读取线程

android - 在应用程序android中上传pdf或txt并转换为base64

java - 如何在java中恢复html内容?

java - 如何分享listiview的内容(图片+文字)?

go - 如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?

c++ - 如果已知访问顺序是安全的,如何在没有互斥锁的情况下同步线程/CPU?

java - 多线程中的类锁和对象锁

android - 无法在我的设备中启动 Android 应用程序