以下の回答に基づく:それはまだ私には明らかではありません:concurrentMapの同期された構成は、もしあれば、何をしますか。つまり、コンカレントマップの場合、同期(マップ)と非同期の違いは何ですか。私は解決策の正しさや信じられている良さに興味がありません。質問への答え:Q:コンカレントマップで同期する場合と同期しない場合の違いは何ですか?特にパフォーマンスに関しては..で十分です。これ以上何もしないでください。
私は何が起こるかだけに興味があり、補足的なアドバイスはありません。
少し精神的な問題を解決しているという理論上の質問があります。ConcurrentCollectionクラスsay=>ConcurrentHashMapマップがあると仮定します。
私には3つの方法があると仮定します。
method1: synchronized(map){
doSomethingWithThemap(); //Assume put integers 1.. 1000000
}
method2:doSomethingWithThemap(); //Note it is not synchronized
method3:doSomethingElseWithThemap(); //Assume put integers 2000000.. 3000000
ここで、2つのテストケースを想定します。
- TestCase1:2つのスレッドAとBを生成します。Aはmethod1を呼び出し、Bはmethod3を呼び出します。
- TestCase2:2つのスレッドA'とB'を生成します。A'はmethod2を呼び出し、B'はmethod3を呼び出します。
パフォーマンスの観点から、TestCase2が勝つことを期待します。私が理解していることから、同期されたブロックがマップのロックを保持するため、TestCase1 Bは同時ではありますが、マップに追加できません。これは、 TestCase2。
私のユニットテストはこの仮説を検証しません。
Q:ここで何が欠けていますか。つまり、concurrentcollectionで同期されたブロックが与えられた場合、パフォーマンスはまったく影響を受けませんか?