2

ConcurrentHashMap のソースコードより

/**
  171        * Number of unsynchronized retries in size and containsValue
  172        * methods before resorting to locking. This is used to avoid
  173        * unbounded retries if tables undergo continuous modification
  174        * which would make it impossible to obtain an accurate result.
  175        */
  176       static final int RETRIES_BEFORE_LOCK = 2;

1.反復はロックを保持しないと読みましたが、上記のステートメントはどういう意味ですか? get のような操作でもロックを保持できますか?シナリオも提供してください。

2. スレッド 1 で実行されている更新操作は、その要素の反復がまだ行われていない場合、スレッド 2 の反復で可視になりますか? (揮発性と可視性?)

3.ロックが行われる更新以外の状況はありますか?

4. データを取得するときは、揮発性読み取りが使用されます。揮発性読み取りが失敗した場合、セグメントのロックは、成功した読み取りの最後の試みのために取得されます。これはどういう意味ですか?揮発性読み取りとは何ですか?

4

1 に答える 1