2 つのメソッドがあり、各メソッドのステートメントが同期されているコードをテストしています。
private final Object obj1 = new Object();
private final Object obj2 = new Object();
public void method1(int result)
{
//there's a loop to create delay
synchronized (obj1){
sum = sum + result;
}
//there's a loop to create delay
}
public void method2(int result)
{
//there's a loop to create delay
synchronized (obj2){
sum = sum - result;
}
//there's a loop to create delay
}
私が基本的にやっていることは、合計に結果を追加し、同じ量を減算してから合計を出力することです。したがって、最初と最後の金額は一定でなければなりません。
問題は、2 つの diff オブジェクトをロックとして使用すると、最終的な量が最初の量と同じにならない理由がわからないことです。ただし、「this」オブジェクトを両方のステートメントのロックとして使用する場合は一定です。しかし、「this」をオブジェクトとして使用しても、同期されたメソッドを使用するよりも実行時間が速くなりませんでした。
私はまだ同期の概念に慣れていないので、助けていただければ幸いです。