1つのスレッドコールプラス1、2番目のプラス2。フィールドの最初の変更になりますか?または、2回目の呼び出しlock()を呼び出すスレッドでは使用できませんか?ReentrantLockをロックします。 javadocを理解できません
plus2がlock()を呼び出さない場合、彼はどのような値を使用しますか?
public class Test {
private final ReentrantLock lock = new ReentrantLock();
private int first;
public void plus1() {
lock.lock();
try {
first++;
} finally {
lock.unlock();
}
}
public void plus2() {
lock.lock();
try {
first += 2;
} finally {
lock.unlock();
}
}
public int getFirst() {
return first;
}
}
あなたの質問は(少なくとも私にとって)理解するのは難しいです。 'plus1'と' plus2'の両方が 'first'フィールドを変更するので、フィールドは2回修正されるように見えますが、同時ではありません...あなたが何を求めているのかは分かりません。 –
この場合、ロックは再入可能である必要はありません。ロックを使用する別のメソッドからロックを使用するメソッドを呼び出さないでください。したがって、1つのスレッドは決してコールスタック内でロックを2回入力することはできません。 –
また、getFirst()でロックを使用する必要があります。そうしないと、他のメソッドによる変更がgetFirst()を呼び出すスレッドに表示されない場合があります。 –