gpt4 book ai didi

Java 同步 - 这个简单的方法需要它吗?

转载 作者:行者123 更新时间:2023-12-01 07:43:01 24 4
gpt4 key购买 nike

我有一个从多个线程调用的简单方法;

@Override
public Bitmap getFullBitmap(Filter f, ProgressCallback<String> pc) {
// Requires synchronisation?
Bitmap bitmap = fullMap.get(f.id);
if(bitmap == null){
f.setProgressCallback(pc);
bitmap = f.e.evaluate(currentBitmap);
fullMap.put(f.id, bitmap);
}
return bitmap;
}

由于使用的对象都不是类的字段(除了 fullMap),是否可以只调用它,或者例如在方法执行时一个线程可能会更改 bitmap 的值?

fullMap 是一个 SoftHashMap,它维护索引的 Bitmap 对象的 SoftReferences,但用于创建它的 Filter 的 id。如果这有任何意义的话。

我没有遇到任何问题,但我想我可能需要它。

如果不清楚,请要求澄清,这个问题在我的脑海中是有意义的;)

编辑

  • currentBitmap 是 Bitmap 类型的对象,系统中有一个位图被认为是当前的,并由该类管理。
  • 这段代码形成了一个非常基本的缓存,返回的位图将始终是每个 id 都相同,但不同在此方法之外进行修改。
  • 通过在SoftHashMap 如DrHeinx所述和硬的 FIFO 队列最近 10 条引用文献补充说我希望避免昂贵的电话费进行评估。话虽这么说,调用 f.e.evaluate 将返回相同的位图对象(如果是)给定相同的输入。经过一些认为似乎正在同步这个方法是个好主意两个线程的积极结果执行此代码相同过滤。
  • 此外,我将位图设为最终的创建后不应发生变化。

非常感谢!伽夫

最佳答案

2 个线程可以同时访问 map fullMap。两者都可以确定映射不包含同一键的值,每个创建一个,然后将其写回,从而插入两次键。

除了效率之外,这很可能不是一个问题。然而,它可能会造成困惑,并且随着解决方案的发展,可能会在未来引起问题(将来创建这些对象的成本有多高?如果有人将代码复制/粘贴到不合适的地方会发生什么!)

我强烈建议对上述内容进行同步(最有可能在 fullMap 本身而不是包含的对象上进行同步,但在决定确切需要什么之前,更多上下文会很有用)

关于Java 同步 - 这个简单的方法需要它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/993039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com