2011-08-17 23 views
11

新しいAndroidクラスLruCacheはスレッドセーフですか? Javaの医者は言う:Android LruCache(Android 3.1)スレッドセーフ

このクラスはスレッドセーフです。キャッシュで同期をとることによってアトミックに複数のキャッシュ操作を実行します。

synchronized (cache) { 
    if (cache.get(key) == null) { 
     cache.put(key, value); 

    }} 

は、彼らはスレッドセーフではありませんと言うことを意味していましたか?クラスがスレッドセーフである場合、なぜ同期する必要がありますか?

ありがとうございます!

答えて

17

クラスがスレッドセーフであるかどうかは関係ありません。複数の操作を使用する場合は、引き続き同期する必要があります。どのように使用するかによって異なります。

if (cache.get(key) == null) 
{ 
    //at this point you think there is no such value in the cache 
    //but another thread might have just added one between executing 
    //those two lines of code 
    cache.put(key, value); 
} 
関連する問題