【发布时间】:2009-06-14 15:36:24
【问题描述】:
我有一个从多个线程调用的简单方法;
@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,但过滤器的 id 用于创建它。如果这有任何意义。
我没有遇到任何问题,但我认为我可能需要它。
如果不清楚,请要求澄清,这个问题在我的脑海中是有道理的;)
编辑
- currentBitmap 是 Bitmap 类型的对象,系统中有一个位图被认为是当前的,并由此类管理。
- 这段代码构成了一个非常基本的缓存, 返回的位图将始终是 每个 id 都相同,而不是 在此方法之外修改。
- 通过在 Dr Heinx 描述的 SoftHashMap 和一个 FIFO 队列 最近的 10 篇参考文献 补充说我希望避免昂贵的电话 f.e.评估。话虽如此, 调用 f.e.evaluate 将返回一个 相同的位图对象,如果它是 给定相同的输入。经过一番 认为似乎同步 该方法是个好主意,因为什么都没有 积极来自两个线程 执行此代码相同 过滤器。
- 此外,我将位图设为最终版本 不应在创建后发生变异。
非常感谢! 加夫
【问题讨论】:
标签: java synchronization methods