競合状態とは何か、競合状態を回避する方法、および Java コードでそれを見つける方法について、誰でも説明できますか?
さて、私は「競合状態」を数日知っています.2つの例があります.おそらくそれらは十分ではないので、あなたの助けが必要です.
例 1: 確認してから行動する:
if(vector.contains(e))//check
{
vector.remove(e)
}
アクセスできるスレッドが 2 つあり、ベクトルに e が含まれていることを確認した後でスレッド 1 が一時停止し、e がベクトルに含まれている場合、スレッド 2 がアクセスしてチェックし、ベクトルから e を削除すると、スレッド 1 が戻ってきて削除アクションを実行すると、エラーが発生します。 thread2 によって既に削除されています。
例 2: 読み取り変更書き込み:
メソッドにカウンター変数があるとします。メソッドが呼び出されると、カウンターは 1 増加します。
counter++
これはアトミック操作ではなく、次の 3 つのステップがあります。 1. 値を取得する 2. 値を増やす 3. 値を代入する
競合状態について私が知っていることはすべてここにあります。あなたの知識を私と共有していただければ幸いです:)
ありがとう