私は以下のようなクラスがあり、スレッドセーフであるか、メインスレッドとLoader
スレッドがmCache
の独自のコピーを持つ可能性があるため、get(..)メソッドローダースレッドで追加されたキャッシュから何かを取得できませんか?これをvolatile
とする必要がありますか?インスタンス変数とスレッディング
ありがとうございます!
public class StackExample
{
private final ConcurrentHashMap<String, SoftReference<Bitmap>> mCache = new ConcurrentHashMap<String, SoftReference<Bitmap>>();
private addToCache(String key, Bitmap bitmap)
{
mCache.put(key, bitmap);
}
private Bitmap getBitmap(String key)
{
if(mCache.contains(key))
{
return mCache.get(key);
}
else
{
//add to loading queue
}
}
private class Loader extends Thread
{
@Override
public void run()
{
...//check loading queue and load some images here
mCache.put(keyString, new SoftReference<Bitmap>(loadedBitmap));
}
}
}
すべてのスレッドに一意の* mCache *が表示されますが、コードはまだ正しく同期されていません。あなたは* from * getBitmap *がどこから呼び出されているかは完全にはっきりしていませんが、*同じキー*のコードの一部を読み込みキューに追加する*ことがあります* !?)。 – SyntaxT3rr0r
btw +1あなたの質問には、あなたの非常に細かい質問をアップvotingせずにジョン・スケートの一行の回答をアップした人々に恥をかく。感謝! – SyntaxT3rr0r
ありがとう!はい、ここでは簡単な例ですが、私はあなたが意味するものは何を意味するか知っています:) – Dori