同期されたメソッドm1と同期されていないメソッドm2を持つクラスTestがあり、Testのインスタンスはobj2個のスレッドT1およびT2にしようとします。インスタンスobjに関連するアクセスメソッド。 T1がobj.m1(同期メソッド)を呼び出し、m1の実行を完了する前に、T2がobj.m2(非同期)を呼び出すとどうなりますか。 T2は待たなければなりませんか?同じオブジェクト上の同期および非同期のメソッドにアクセスする複数のスレッド
私はインタビューでこの質問をしました。
私の回答: T2は待ち時間なく実行し続けます。 T2が非同期メソッドにアクセスしているため、ロックが必要ありません。
インタビュアーは私の答えに同意していないようですが、私は彼に私の答えの正しさについて尋ねたところ、何も入力しませんでした。
何か不足している場合は、私にご理解ください。
P.S.私はすでにテストプログラムを試していますが、私の理解が正しいことがわかります。私はインタビュアーに説明したようにこれがうまくいかない特別なシナリオがあるかどうか疑問に思っています。
なぜテストしませんか?あなたの質問を書くよりも速いでしょう。 –
2つのスレッドが同じロックを同時に保持しようとする場所をブロックします。異なるロックまたはロックなしは効果がありません。これは、どのメソッドがどのオブジェクトで呼び出されているかに関係なくです。 –
おそらくインタビュアーがもっと探し求めていたのかもしれません。あるいは、別の候補者から与えられた答えが、それについてより良くなったことを具体的に知らなくても良いと思ったのかもしれません。 –