一个类的对象锁只有一个,如果有几个非静态函数都是synchronized,在某一时刻只有一个线程能调用其中一个函数
假如一个类有几个静态函数是synchronized,在某一时刻只有一个线程能调用其中一个静态函数吗?也就是类锁也只有一个吗?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
前のメソッドはインスタンス オブジェクトをロックし、現在のオブジェクトをロックします。複数のインスタンス オブジェクトがある場合、これらの synchronized メソッドは同期されません。 2 番目のタイプのロックはクラス オブジェクトです。クラス オブジェクトは 1 つだけなので、同期されます。
synchronized
リーリー
上記のコードでは、test1メソッドとtest2が同じオブジェクトの場合、ブロッキングが発生します。もちろん、これは違うので、別のオブジェクトであっても問題ありません。これはオブジェクトレベルのロックと呼ばれます。 test3 は test4 と同等です。ここでは、クラス オブジェクトがロックとして使用されます。これは、通常、クラスのクラス インスタンスは 1 つだけであるため、このメソッドに入るたびにロックされます。これはクラスレベルのロックと呼ばれます。
非静的同期メソッド (A) で使用されるロックは、現在のインスタンス オブジェクトそのものです。1 つのインスタンスの A がロックを取得した後、インスタンスの他の A はロックが解放されるまで待機する必要があります。複数のインスタンスは異なるロックを使用します。 ;
静的同期メソッド (B) で使用されるロックは、1 つの B がロックを取得すると、それが 1 つのインスタンスであっても複数のインスタンスであっても、他の B はロックを解放するまで待機する必要があります。
Classクラスがオブジェクトを作成するとき、それは共通のクラスを表します。このとき、「クラスロック」はこのインスタンスオブジェクトのロックです
Class
「ミューテックス ロック」の概念について話しています。同期変更方法には 2 つの状況があります。
同期によってメソッドが変更される場合、ロック オブジェクトは現在のメソッドが属するオブジェクト、つまりメソッド内のこれです。
synchronized によって静的メソッドが変更された場合、静的メソッドによってロックされているオブジェクトは、現在のクラス オブジェクト (Class クラスのインスタンス) になります。各クラスには固有のクラス オブジェクトがあります。クラス オブジェクトの取得方法: classname.class。
1. 静的メソッドと非静的メソッドは同時に同期宣言され、相互に排他的ではありません。その理由は、静的メソッドは、現在のメソッドが属するオブジェクトではなく、クラス オブジェクトをロックするためです。 2. Synchronized が 2 つの異なるコードを変更するが、ロック オブジェクトが同じ場合、2 つのスレッドはそれぞれ 2 つのコードを呼び出すときに相互排他的になります
オブジェクト メソッドの同期変更の場合、ロックはオブジェクト自体です。 静的メソッドの同期変更の場合、ロックはクラス オブジェクト自体です。これはクラス ローダーによって作成されたクラス オブジェクトです。
前のメソッドはインスタンス オブジェクトをロックし、現在のオブジェクトをロックします。複数のインスタンス オブジェクトがある場合、これらの
synchronized
メソッドは同期されません。 2 番目のタイプのロックはクラス オブジェクトです。クラス オブジェクトは 1 つだけなので、同期されます。リーリー
上記のコードでは、test1メソッドとtest2が同じオブジェクトの場合、ブロッキングが発生します。もちろん、これは違うので、別のオブジェクトであっても問題ありません。これはオブジェクトレベルのロックと呼ばれます。
test3 は test4 と同等です。ここでは、クラス オブジェクトがロックとして使用されます。これは、通常、クラスのクラス インスタンスは 1 つだけであるため、このメソッドに入るたびにロックされます。これはクラスレベルのロックと呼ばれます。
非静的同期メソッド (A) で使用されるロックは、現在のインスタンス オブジェクトそのものです。1 つのインスタンスの A がロックを取得した後、インスタンスの他の A はロックが解放されるまで待機する必要があります。複数のインスタンスは異なるロックを使用します。 ;
静的同期メソッド (B) で使用されるロックは、1 つの B がロックを取得すると、それが 1 つのインスタンスであっても複数のインスタンスであっても、他の B はロックを解放するまで待機する必要があります。
。Class
クラスがオブジェクトを作成するとき、それは共通のクラスを表します。このとき、「クラスロック」はこのインスタンスオブジェクトのロックです「ミューテックス ロック」の概念について話しています。同期変更方法には 2 つの状況があります。
【非静的メソッド】オブジェクト メソッドの同期変更の場合、ロックはオブジェクト自体です。
静的メソッドの同期変更の場合、ロックはクラス オブジェクト自体です。これはクラス ローダーによって作成されたクラス オブジェクトです。