静的同期メソッドが、異なるインスタンスを使用する 2 つのスレッドによって同時に呼び出されるとどうなりますか? 出来ますか?オブジェクトロックは非静的同期メソッドに使用されますが、静的同期メソッドにはどのタイプのロックが使用されますか?
2418 次
4 に答える
6
メソッドを実装するオブジェクトで同期するのと同じClass
なので、可能です。メカニズムは、メソッドが呼び出されたインスタンスを事実上無視します。
class Foo {
private static synchronized doSomething() {
// Synchronized code
}
}
これを書くためのショートカットです:
class Foo {
private static doSomething() {
synchronized(Foo.class) {
// Synchronized code
}
}
}
于 2012-09-19T10:10:05.300 に答える
6
可能です。
Class
スレッドは on のようにクラスのオブジェクトをロックしますMyClass.class
。
JLS、セクション 8.4.3.6を参照してください。同期方法:
8.4.3.6. 同期されたメソッド
同期メソッドは、実行前にモニター (§17.1) を取得します。
クラス (静的) メソッドの場合、メソッドのクラスの Class オブジェクトに関連付けられたモニターが使用されます。
于 2012-09-19T10:10:11.140 に答える
0
静的同期メソッドは、タイプ java.lang.Class のインスタンスでロックを使用します。つまり、アクセス可能な各クラスは実行時に Class 型のオブジェクトによって表され、そのオブジェクトは静的な同期メソッドによって使用されます。
于 2012-09-19T10:11:41.300 に答える