私はかなり長い間Javaの内部を研究してきました。Java でスレッド化/ロックがどのように行われるかを学び、理解したいと思っています。
したがって、同期されたメソッドまたは同期されたブロックにアクセスするには、スレッドは最初にオブジェクトのロックを取得する必要があります。さて、ここに私がもう少し光が必要なものがあります。
では、スレッドがオブジェクトのロックを取得するたびに、内部でセマフォの値をインクリメントするのでしょうか? 答えが「はい」の場合は、このシナリオを見てみましょう。
class ABC{
public void method_1(){
synchronized(xyz){
....
}
}
public void method_2(){
...
synchronized(xyz){
....
}
}
}
したがって、スレッド 1 とスレッド 2 の 2 つのスレッドがあるとします。スレッド 1 が最初にmethod_1に入り、最初に xyz のロックを取得したと仮定します。そして、Thread2が method_2に入り、xyz のロックを取得しようとします。何が起こるか?(私に言わせれば、Thread2 は、オブジェクトのセマフォ値が 0 より大きいことが判明したため、ブロックされます)
私の推論が正しいかどうか教えてください。