12

新しい Android クラスLruCacheはスレッドセーフですか? Java doc は次のように述べています。

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

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

   }}

彼らは、スレッドセーフではないと言うつもりでしたか? クラスがスレッドセーフである場合、なぜ同期する必要があるのでしょうか?

ありがとう!

4

1 に答える 1

18

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

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);
}
于 2011-08-17T00:50:04.790 に答える