ベクターに同期メソッドが含まれているとはどういう意味ですか?
メソッドはとしてマークされていsynchronized
ます。
メソッドには、マルチスレッドアクセスのデータのロックとロック解除を制御する内部ロックが含まれていますか?
いいえ、キーワードがメソッドにあるにもかかわらず、ロックされているのはメソッドではなくオブジェクトです。メソッド自体をロックする方法はありません。
ベクトル(vs. ArrayList)を使用することでデータの破損を防ぎ、問題またはデータ構造と同期の問題にさらに光を当てることができる場所の例を誰かが提供できますか?
多くの例があります。最も簡単なのは、数値をインクリメントすることです。数を増やす2つのスレッドがあるとします(たとえば、コレクションのサイズ)。同期なしで行うことができます。
Thread1: read size e.g. 0
Thread1: increment size
Thread1: write size e.g. 1
Thread2: read size e.g. 1
Thread2: increment size
Thread2: write size e.g. 2
ただし、スレッドは任意の順序でアクションを実行できるため(これがスレッドの要点であるため)、次のことも可能です。
Thread1: read size e.g. 0
Thread2: read size e.g. 0
Thread1: increment size
Thread2: increment size
Thread1: write size e.g. 1
Thread2: write size e.g. 1
したがって、2つのスレッドがカウンターをインクリメントしたとしても、それらのアクションが調整されていないため、正しくありません。これは、同期が行うことです。