ブロックレベルでの同期に関するいくつかのポイントをクリアする必要があります。
次の同期ブロックがクラスの同じメソッドにあるとします。
class A{
some_method(){
//BLOCK1
synchronized(OBJ1){
shared code...
}
//BLOCK2
synchronized(OBJ1){
shared code...
}
//BLOCK3
synchronized(OBJ2){
shared code...
}
}
}
次のクエリ:
1)1つのスレッドがOBJ1のロックを取得してblock1に入ると、最初のスレッドがOBJ1のロックを保持している限り、他のスレッドはBlock2に入ることができませんが、他のスレッドは同時にblock3を実行できますか?
2)ブロック1の完了後にブロック2に入った場合、最初のスレッドはOBJ1のロックを再度取得する必要がありますか?
3)最初のスレッドがブロック2のコードをブロック1から呼び出す場合、最初のブロックの実行中に取得したOBJ1のロックを解放して再度取得する必要がありますか、それとも最初のブロックで取得した同じロックが機能しますか?
ここで、block1が1つのクラスのメソッドにあり、blockk2と3が他のクラスのメソッドにあるとします。
4)いくつかの第3クラスのobj(OBJ1、OBJ2)のロックを取得することによって同期が行われているため、ポイント1と同じことが当てはまりますか?