以下のシナリオで、同期ブロックと同期メソッドの間に疑問があります。
パート1 - - - - - - - :
Class table
{
Synchronized(this)
{
……………………
}
}
ここで、テーブルクラスのオブジェクトをロックしました。--------------------------------------…</p>
パート2:
Class table
{
Customer cust=new Customer();
Synchronized(cust)
{
……………………
}
}
ここでは、customer.ieのオブジェクトをロックしました。パート1では、?-テーブルクラスのオブジェクトをロックしました。
テーブルクラスのオブジェクトが異なる場所から同期ブロックに同時にアクセスしようとする可能性があるため、テーブルクラスがロックされます。これを防ぐために
、part1でテーブルクラスのオブジェクトがロックされました。ここでpart2に来てください:?-ここで、顧客クラスのオブジェクトをロックしました---------------------------------- ----…</p>
私の疑問:
part2のテーブルクラス以外のテーブルクラスのオブジェクトをロックする必要があるのはなぜですか?
パート2でcustをロックしない場合は、テーブルクラスを使用して同期ブロックにアクセスできます。custをロックする場合は、同期ブロックにアクセスするためにテーブルクラスのオブジェクトも必要です。テーブルクラスのオブジェクトは、同期ブロックにアクセスするためにのみ必要です。
同期のため、テーブルクラスのオブジェクトが異なるスレッドから同期ブロックに同時にアクセスするのを防ぎました。では、なぜテーブルクラス以外のオブジェクトをテーブルクラスにロックする必要があるのでしょうか。顧客クラスのオブジェクトは、
異なる場所から同時に同期ブロックにアクセスしようとしますか?パート2では、テーブルクラス以外のオブジェクトをロックしました。テーブル以外のクラスのオブジェクトでテーブルクラスをロックすることは、パート2
で顧客クラスのオブジェクトをロックすることの利点となるのはどのような状況ですか?顧客クラス、つまりテーブルクラス以外のオブジェクトをロックする必要はありますか?
パート2で顧客クラスのオブジェクトをロックしないと、どのような損害が発生しますか?
どうか、私はJavaスレッドを初めて使用し、しばらくの間、これらの質問に頭を悩ませようとしてきました。明確な説明があれば大いに役立ちます。ありがとう